
<!DOCTYPE HTML>
<html lang="zh-hans" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>常用软件和框架 · Aivin开发笔记</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        <meta name="author" content="Aivin">
        
        
    
    <link rel="stylesheet" href="../../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-search-plus/search.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-anchor-navigation-ex/style/plugin.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-tbfed-pagefooter/footer.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-local-video/video-js.min.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-splitter/splitter.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-theme-comscore/test.css">
                
            
        

    

    
        
        <link rel="stylesheet" href="../../styles/website.css">
        
    

        
    
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="../doc/开发规范.html" />
    
    
    <link rel="prev" href="../doc/常用网站.html" />
    

    
        <link rel="shortcut icon" href='../../assets/images/favicon.ico' type="image/x-icon">
    
    
        <link rel="bookmark" href='../../assets/images/favicon.ico' type="image/x-icon">
    
    
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="输入并搜索" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="../../">
            
                <a href="../../">
            
                    
                    首页
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" data-path="../doc/常用网站.html">
            
                <a href="../doc/常用网站.html">
            
                    
                    常用网站
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="1.3" data-path="常用软件和框架.html">
            
                <a href="常用软件和框架.html">
            
                    
                    常用软件和框架
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4" data-path="../doc/开发规范.html">
            
                <a href="../doc/开发规范.html">
            
                    
                    开发规范
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5" data-path="../doc/开源软件.html">
            
                <a href="../doc/开源软件.html">
            
                    
                    开源软件和框架
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.6" data-path="../doc/Android常用代码.html">
            
                <a href="../doc/Android常用代码.html">
            
                    
                    Android常用代码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7" data-path="../源码阅读/源码阅读配置.html">
            
                <a href="../源码阅读/源码阅读配置.html">
            
                    
                    源码阅读
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.7.1" data-path="../源码阅读/其他框架源码.html">
            
                <a href="../源码阅读/其他框架源码.html">
            
                    
                    其他框架源码
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.8" data-path="../产品经理/产品经理.html">
            
                <a href="../产品经理/产品经理.html">
            
                    
                    产品经理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9" data-path="../设计模式/设计模式.html">
            
                <a href="../设计模式/设计模式.html">
            
                    
                    设计模式
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.9.1" data-path="../设计模式/设计模式.html">
            
                <a href="../设计模式/设计模式.html">
            
                    
                    设计模式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.2" data-path="../设计模式/模式详解.html">
            
                <a href="../设计模式/模式详解.html">
            
                    
                    模式详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.3" data-path="../设计模式/mvc等.html">
            
                <a href="../设计模式/mvc等.html">
            
                    
                    mvc等
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.10" data-path="../数据结构/常用数据结构.html">
            
                <a href="../数据结构/常用数据结构.html">
            
                    
                    基本算法
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.10.1" data-path="../数据结构/常用数据结构.html">
            
                <a href="../数据结构/常用数据结构.html">
            
                    
                    常用数据结构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.2" data-path="../常用算法/算法术语.html">
            
                <a href="../常用算法/算法术语.html">
            
                    
                    算法术语
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.3" data-path="../常用算法/排序算法.html">
            
                <a href="../常用算法/排序算法.html">
            
                    
                    排序算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.4" data-path="../常用算法/查找算法.html">
            
                <a href="../常用算法/查找算法.html">
            
                    
                    查找算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.5" data-path="../常用算法/大数相加.html">
            
                <a href="../常用算法/大数相加.html">
            
                    
                    大数相加
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.6" data-path="../常用算法/集合的所有子集.html">
            
                <a href="../常用算法/集合的所有子集.html">
            
                    
                    获得集合的所有子集
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.7" data-path="../常用算法/扫描线种子填充算法.html">
            
                <a href="../常用算法/扫描线种子填充算法.html">
            
                    
                    扫描线种子填充算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.8" data-path="../常用算法/其他算法.html">
            
                <a href="../常用算法/其他算法.html">
            
                    
                    其他算法
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.11" data-path="../java基础/原码补码反码.html">
            
                <a href="../java基础/原码补码反码.html">
            
                    
                    Java部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.11.1" data-path="../java基础/原码补码反码.html">
            
                <a href="../java基础/原码补码反码.html">
            
                    
                    原码补码反码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.2" data-path="../java基础/java常用代码.html">
            
                <a href="../java基础/java常用代码.html">
            
                    
                    java常用代码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.3" data-path="../java基础/JVM详解.html">
            
                <a href="../java基础/JVM详解.html">
            
                    
                    JVM详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.4" data-path="../java基础/类加载机制.html">
            
                <a href="../java基础/类加载机制.html">
            
                    
                    类加载机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.5" data-path="../java基础/内存模型.html">
            
                <a href="../java基础/内存模型.html">
            
                    
                    内存模型
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.6" data-path="../java基础/GC机制.html">
            
                <a href="../java基础/GC机制.html">
            
                    
                    GC机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.7" data-path="../java基础/对象内存布局.html">
            
                <a href="../java基础/对象内存布局.html">
            
                    
                    对象内存布局
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.8" data-path="../java基础/继承多态.html">
            
                <a href="../java基础/继承多态.html">
            
                    
                    继承和多态
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.9" data-path="../java基础/相等判断.html">
            
                <a href="../java基础/相等判断.html">
            
                    
                    相等判断
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.10" data-path="../java基础/Java容器类.html">
            
                <a href="../java基础/Java容器类.html">
            
                    
                    Java容器类
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.11" data-path="../java基础/Java枚举.html">
            
                <a href="../java基础/Java枚举.html">
            
                    
                    Java枚举
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.12" data-path="../java基础/自定义异常.html">
            
                <a href="../java基础/自定义异常.html">
            
                    
                    自定义异常
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.13" data-path="../java基础/深度拷贝.html">
            
                <a href="../java基础/深度拷贝.html">
            
                    
                    深度拷贝
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.14" data-path="../java基础/泛型详解.html">
            
                <a href="../java基础/泛型详解.html">
            
                    
                    泛型详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.15" data-path="../java基础/线程详解.html">
            
                <a href="../java基础/线程详解.html">
            
                    
                    线程详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.16" data-path="../java基础/java注解.html">
            
                <a href="../java基础/java注解.html">
            
                    
                    注解详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.17" data-path="../java基础/数据解析.html">
            
                <a href="../java基础/数据解析.html">
            
                    
                    数据解析
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.18" data-path="../java基础/java8新特性.html">
            
                <a href="../java基础/java8新特性.html">
            
                    
                    Java8新特性
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.12" data-path="../android基础/android零散知识.html">
            
                <a href="../android基础/android零散知识.html">
            
                    
                    Android部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.12.1" data-path="../android基础/基础控件使用.html">
            
                <a href="../android基础/基础控件使用.html">
            
                    
                    基础控件使用
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.2" data-path="../android基础/android零散知识.html">
            
                <a href="../android基础/android零散知识.html">
            
                    
                    Android零散知识
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.3" data-path="../android基础/android坐标体系.html">
            
                <a href="../android基础/android坐标体系.html">
            
                    
                    Android坐标体系
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.4" data-path="../android基础/APP的启动流程.html">
            
                <a href="../android基础/APP的启动流程.html">
            
                    
                    APP启动流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.5" data-path="../android基础/View加载流程.html">
            
                <a href="../android基础/View加载流程.html">
            
                    
                    View加载流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.6" data-path="../android基础/事件分发机制.html">
            
                <a href="../android基础/事件分发机制.html">
            
                    
                    事件分发机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.7" data-path="../android基础/控件绘制流程.html">
            
                <a href="../android基础/控件绘制流程.html">
            
                    
                    控件绘制流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.8" data-path="../android基础/常用shape.html">
            
                <a href="../android基础/常用shape.html">
            
                    
                    常用shape
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.9" data-path="../android基础/进程通信.html">
            
                <a href="../android基础/进程通信.html">
            
                    
                    进程通信
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.10" data-path="../通信方式/通信方式详解.html">
            
                <a href="../通信方式/通信方式详解.html">
            
                    
                    通信方式详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.11" data-path="../android基础/Binder详解.html">
            
                <a href="../android基础/Binder详解.html">
            
                    
                    Binder详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.12" data-path="../android基础/Handler详解.html">
            
                <a href="../android基础/Handler详解.html">
            
                    
                    Handle详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.13" data-path="../android基础/Fragment详解.html">
            
                <a href="../android基础/Fragment详解.html">
            
                    
                    Fragment详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.14" data-path="../android基础/Activity详解.html">
            
                <a href="../android基础/Activity详解.html">
            
                    
                    Activity详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.15" data-path="../android基础/BroadcastReceiver.html">
            
                <a href="../android基础/BroadcastReceiver.html">
            
                    
                    BroadcastReceiver详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.16" data-path="../android基础/Service服务.html">
            
                <a href="../android基础/Service服务.html">
            
                    
                    Service详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.17" data-path="../android基础/动画详解.html">
            
                <a href="../android基础/动画详解.html">
            
                    
                    动画详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.18" data-path="../android基础/屏幕刷新机制.html">
            
                <a href="../android基础/屏幕刷新机制.html">
            
                    
                    屏幕刷新机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.19" data-path="../android基础/屏幕适配.html">
            
                <a href="../android基础/屏幕适配.html">
            
                    
                    屏幕适配
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.20" data-path="../android基础/图片加载详解.html">
            
                <a href="../android基础/图片加载详解.html">
            
                    
                    图片加载详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.21" data-path="../android基础/WebView详解.html">
            
                <a href="../android基础/WebView详解.html">
            
                    
                    WebView详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.22" data-path="../android基础/沉浸式.html">
            
                <a href="../android基础/沉浸式.html">
            
                    
                    沉浸式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.23" data-path="../android基础/相机模块.html">
            
                <a href="../android基础/相机模块.html">
            
                    
                    相机模块
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.24" data-path="../android基础/地图模块.html">
            
                <a href="../android基础/地图模块.html">
            
                    
                    地图模块
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.25" data-path="../android基础/Androidstudio插件开发.html">
            
                <a href="../android基础/Androidstudio插件开发.html">
            
                    
                    Androidstudio插件开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.26" data-path="../android基础/Apk插件化开发.html">
            
                <a href="../android基础/Apk插件化开发.html">
            
                    
                    Apk插件化开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.27" data-path="../android基础/App组件化开发.html">
            
                <a href="../android基础/App组件化开发.html">
            
                    
                    App组件化开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.28" data-path="../android基础/sdk开发.html">
            
                <a href="../android基础/sdk开发.html">
            
                    
                    sdk开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.29" data-path="../android基础/APP优化.html">
            
                <a href="../android基础/APP优化.html">
            
                    
                    APP优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.30" data-path="../android基础/项目参数配置.html">
            
                <a href="../android基础/项目参数配置.html">
            
                    
                    项目参数配置
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.31" data-path="../android基础/App发布.html">
            
                <a href="../android基础/App发布.html">
            
                    
                    App发布
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.32" data-path="../android基础/Android外挂.html">
            
                <a href="../android基础/Android外挂.html">
            
                    
                    Android外挂
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.33" data-path="../android基础/Android字节码插桩.html">
            
                <a href="../android基础/Android字节码插桩.html">
            
                    
                    Android字节码插桩
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.34" data-path="../android基础/智能家居.html">
            
                <a href="../android基础/智能家居.html">
            
                    
                    智能家居
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.13" data-path="../python/python基础.html">
            
                <a href="../python/python基础.html">
            
                    
                    python部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.13.1" data-path="../python/python基础.html">
            
                <a href="../python/python基础.html">
            
                    
                    python基础
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.13.2" data-path="../python/python爬虫.html">
            
                <a href="../python/python爬虫.html">
            
                    
                    python爬虫
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.14" data-path="../gradle/Groovy.html">
            
                <a href="../gradle/Groovy.html">
            
                    
                    Groovy
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.15" data-path="../kotlin/kotlin部分.html">
            
                <a href="../kotlin/kotlin部分.html">
            
                    
                    kotlin部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.16" data-path="../flutter/flutter部分.html">
            
                <a href="../flutter/flutter部分.html">
            
                    
                    flutter部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17" data-path="../native/ccpp.html">
            
                <a href="../native/ccpp.html">
            
                    
                    native部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.17.1" data-path="../native/Linux.html">
            
                <a href="../native/Linux.html">
            
                    
                    Linux
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.2" data-path="../native/ccpp.html">
            
                <a href="../native/ccpp.html">
            
                    
                    cCpp
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.3" data-path="../native/NDK.html">
            
                <a href="../native/NDK.html">
            
                    
                    NDK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.4" data-path="../native/系统编译剪裁.html">
            
                <a href="../native/系统编译剪裁.html">
            
                    
                    系统编译剪裁
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.5" data-path="../native/音视频.html">
            
                <a href="../native/音视频.html">
            
                    
                    音视频
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.6" data-path="../native/音视频第三方库.html">
            
                <a href="../native/音视频第三方库.html">
            
                    
                    音视频第三方库
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.7" data-path="../native/相关代码.html">
            
                <a href="../native/相关代码.html">
            
                    
                    相关代码
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.18" data-path="../server/服务器部分.html">
            
                <a href="../server/服务器部分.html">
            
                    
                    服务器部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.19" data-path="../webDev/web部分.html">
            
                <a href="../webDev/web部分.html">
            
                    
                    web部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.20" data-path="../人工智能/人工智能相关概念.html">
            
                <a href="../人工智能/人工智能相关概念.html">
            
                    
                    人工智能
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.21" data-path="../面试真题/极飞.html">
            
                <a href="../面试真题/极飞.html">
            
                    
                    面试真题
            
                </a>
            

            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            本书使用 GitBook 发布
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="../.." >常用软件和框架</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div class="search-plus" id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <div id="anchor-navigation-ex-navbar"><i class="fa fa-navicon"></i><ul><li><span class="title-icon "></span><a href="#intellij-idea"><b>1. </b>IntelliJ IDEA</a></li><li><span class="title-icon "></span><a href="#androidstudio"><b>2. </b>Androidstudio</a></li><ul><li><span class="title-icon "></span><a href="#androidstudio-&#x81EA;&#x52A8;&#x4EE3;&#x7801;&#x8865;&#x5168;&#x914D;&#x7F6E;"><b>2.1. </b>Androidstudio &#x81EA;&#x52A8;&#x4EE3;&#x7801;&#x8865;&#x5168;&#x914D;&#x7F6E;</a></li><li><span class="title-icon "></span><a href="#codeglance"><b>2.2. </b>CodeGlance</a></li><li><span class="title-icon "></span><a href="#android-resource-usage-count"><b>2.3. </b>Android-Resource-Usage-Count</a></li><li><span class="title-icon "></span><a href="#&#x7FFB;&#x8BD1;&#x63D2;&#x4EF6;ectranslation"><b>2.4. </b>&#x7FFB;&#x8BD1;&#x63D2;&#x4EF6;ECTranslation</a></li><li><span class="title-icon "></span><a href="#android-parcelable-code-generator"><b>2.5. </b>Android Parcelable code generator</a></li><li><span class="title-icon "></span><a href="#&#x65E0;&#x7EBF;&#x8C03;&#x8BD5;-adb-wifi"><b>2.6. </b>&#x65E0;&#x7EBF;&#x8C03;&#x8BD5; ADB WIFI</a></li><li><span class="title-icon "></span><a href="#&#x5E03;&#x5C40;&#x67E5;&#x770B;&#x5668;"><b>2.7. </b>&#x5E03;&#x5C40;&#x67E5;&#x770B;&#x5668;</a></li><li><span class="title-icon "></span><a href="#&#x751F;&#x6210;&#x6587;&#x6863;-javadoc"><b>2.8. </b>&#x751F;&#x6210;&#x6587;&#x6863; JavaDoc</a></li><li><span class="title-icon "></span><a href="#&#x5355;&#x884C;&#x6CE8;&#x91CA;"><b>2.9. </b>&#x5355;&#x884C;&#x6CE8;&#x91CA;</a></li><li><span class="title-icon "></span><a href="#&#x591A;&#x884C;&#x6CE8;&#x91CA;&#x5FEB;&#x6377;&#x952E;"><b>2.10. </b>&#x591A;&#x884C;&#x6CE8;&#x91CA;&#x5FEB;&#x6377;&#x952E;</a></li><li><span class="title-icon "></span><a href="#&#x4EE3;&#x7801;&#x6298;&#x53E0;"><b>2.11. </b>&#x4EE3;&#x7801;&#x6298;&#x53E0;</a></li><li><span class="title-icon "></span><a href="#&#x914D;&#x7F6E;&#x4F5C;&#x8005;&#x6A21;&#x677F;"><b>2.12. </b>&#x914D;&#x7F6E;&#x4F5C;&#x8005;&#x6A21;&#x677F;</a></li><li><span class="title-icon "></span><a href="#bookmark-&#x4E66;&#x7B7E;"><b>2.13. </b>BookMark &#x4E66;&#x7B7E;</a></li><li><span class="title-icon "></span><a href="#androidstudio-&#x5FEB;&#x901F;&#x5220;&#x9664;&#x65E0;&#x7528;&#x7684;-import"><b>2.14. </b>androidstudio &#x5FEB;&#x901F;&#x5220;&#x9664;&#x65E0;&#x7528;&#x7684; import</a></li><li><span class="title-icon "></span><a href="#&#x4FEE;&#x6539;-android---gradle-&#x7684;&#x9ED8;&#x8BA4;&#x4F4D;&#x7F6E;"><b>2.15. </b>&#x4FEE;&#x6539; .android /  .gradle &#x7684;&#x9ED8;&#x8BA4;&#x4F4D;&#x7F6E;</a></li></ul><li><span class="title-icon "></span><a href="#git&#x64CD;&#x4F5C;"><b>3. </b>git&#x64CD;&#x4F5C;</a></li><ul><li><span class="title-icon "></span><a href="#&#x914D;&#x7F6E;&#x5168;&#x5C40;&#x4FE1;&#x606F;"><b>3.1. </b>&#x914D;&#x7F6E;&#x5168;&#x5C40;&#x4FE1;&#x606F;</a></li><li><span class="title-icon "></span><a href="#&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5206;&#x652F;"><b>3.2. </b>&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5206;&#x652F;</a></li><li><span class="title-icon "></span><a href="#&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5386;&#x53F2;&#x7248;&#x672C;"><b>3.3. </b>&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5386;&#x53F2;&#x7248;&#x672C;</a></li><li><span class="title-icon "></span><a href="#git-&#x6587;&#x4EF6;&#x72B6;&#x6001;"><b>3.4. </b>git &#x6587;&#x4EF6;&#x72B6;&#x6001;</a></li><li><span class="title-icon "></span><a href="#git-&#x7684;-head-&#x6982;&#x5FF5;"><b>3.5. </b>git &#x7684; HEAD &#x6982;&#x5FF5;</a></li><li><span class="title-icon "></span><a href="#&#x6DFB;&#x52A0;&#x4E2A;&#x4EBA;&#x79C1;&#x94A5;&#x5230;&#x7F51;&#x7AD9;"><b>3.6. </b>&#x6DFB;&#x52A0;&#x4E2A;&#x4EBA;&#x79C1;&#x94A5;&#x5230;&#x7F51;&#x7AD9;</a></li><li><span class="title-icon "></span><a href="#&#x914D;&#x7F6E;&#x5BC6;&#x7801;&#x65B9;&#x5F0F;--ubuntu&#x4E0B;&#x6D4B;&#x8BD5;"><b>3.7. </b>&#x914D;&#x7F6E;&#x5BC6;&#x7801;&#x65B9;&#x5F0F;  Ubuntu&#x4E0B;&#x6D4B;&#x8BD5;</a></li><li><span class="title-icon "></span><a href="#ubuntu&#x4E0B;-ssh-&#x914D;&#x7F6E;-&#x7801;&#x4E91;"><b>3.8. </b>Ubuntu&#x4E0B; SSH &#x914D;&#x7F6E; &#x7801;&#x4E91;</a></li><li><span class="title-icon "></span><a href="#git-&#x6709;&#x65F6;&#x4F1A;&#x628A;&#x672C;&#x5730;&#x4EE3;&#x7801;&#x8986;&#x76D6;&#x6389;"><b>3.9. </b>git &#x6709;&#x65F6;&#x4F1A;&#x628A;&#x672C;&#x5730;&#x4EE3;&#x7801;&#x8986;&#x76D6;&#x6389;</a></li><li><span class="title-icon "></span><a href="#gitignore-&#x6587;&#x4EF6;"><b>3.10. </b>gitignore &#x6587;&#x4EF6;</a></li><li><span class="title-icon "></span><a href="#idea-&#x4E2D;-git-pull-&#x548C;-update-project-&#x7684;&#x533A;&#x522B;"><b>3.11. </b>idea &#x4E2D; git pull &#x548C; update project &#x7684;&#x533A;&#x522B;</a></li><li><span class="title-icon "></span><a href="#git-fetch-&#x548C;-git-pull-&#x7684;&#x533A;&#x522B;"><b>3.12. </b>git fetch &#x548C; git pull &#x7684;&#x533A;&#x522B;</a></li><li><span class="title-icon "></span><a href="#git-push-&#x547D;&#x4EE4;"><b>3.13. </b>git push &#x547D;&#x4EE4;</a></li><li><span class="title-icon "></span><a href="#merge-branch-master-of-xxxxx"><b>3.14. </b>Merge branch &#x2018;master&#x2019; of XXXXX</a></li><li><span class="title-icon "></span><a href="#git-rebase-&#x548C;-git-merge-&#x7684;&#x533A;&#x522B;"><b>3.15. </b>git rebase &#x548C; git merge &#x7684;&#x533A;&#x522B;</a></li></ul><li><span class="title-icon "></span><a href="#gitbook"><b>4. </b>gitbook</a></li><ul><li><span class="title-icon "></span><a href="#windows-&#x5B89;&#x88C5;gitbook"><b>4.1. </b>windows &#x5B89;&#x88C5;gitbook</a></li><li><span class="title-icon "></span><a href="#&#x5728;&#x56FD;&#x5185;&#x4E3A;&#x4E86;&#x52A0;&#x901F;&#x8BBF;&#x95EE;&#x901F;&#x5EA6;&#xFF0C;&#x4E00;&#x822C;&#x4F1A;&#x66F4;&#x6362;&#x6210;&#x6DD8;&#x5B9D;&#x7684;&#x4E0B;&#x8F7D;&#x6E90;"><b>4.2. </b>&#x5728;&#x56FD;&#x5185;&#x4E3A;&#x4E86;&#x52A0;&#x901F;&#x8BBF;&#x95EE;&#x901F;&#x5EA6;&#xFF0C;&#x4E00;&#x822C;&#x4F1A;&#x66F4;&#x6362;&#x6210;&#x6DD8;&#x5B9D;&#x7684;&#x4E0B;&#x8F7D;&#x6E90;</a></li><li><span class="title-icon "></span><a href="#gitbook&#x5E38;&#x7528;&#x7684;&#x4F7F;&#x7528;&#x547D;&#x4EE4;"><b>4.3. </b>gitbook&#x5E38;&#x7528;&#x7684;&#x4F7F;&#x7528;&#x547D;&#x4EE4;</a></li><li><span class="title-icon "></span><a href="#&#x5B89;&#x88C5;&#x9519;&#x8BEF;"><b>4.4. </b>&#x5B89;&#x88C5;&#x9519;&#x8BEF;</a></li><li><span class="title-icon "></span><a href="#gitbook-&#x70ED;&#x66F4;&#x65B0;-windows"><b>4.5. </b>gitbook &#x70ED;&#x66F4;&#x65B0; (Windows)</a></li><li><span class="title-icon "></span><a href="#gitbook-&#x7559;&#x8A00;&#x8BC4;&#x8BBA;"><b>4.6. </b>gitbook &#x7559;&#x8A00;&#x8BC4;&#x8BBA;</a></li></ul><li><span class="title-icon "></span><a href="#&#x865A;&#x62DF;&#x673A;"><b>5. </b>&#x865A;&#x62DF;&#x673A;</a></li><li><span class="title-icon "></span><a href="#windows-&#x7CFB;&#x7EDF;"><b>6. </b>windows &#x7CFB;&#x7EDF;</a></li><ul><li><span class="title-icon "></span><a href="#&#x7535;&#x8111;&#x6D4F;&#x89C8;&#x5668;&#x6A21;&#x62DF;&#x624B;&#x673A;&#x6D4F;&#x89C8;&#x5668;"><b>6.1. </b>&#x7535;&#x8111;&#x6D4F;&#x89C8;&#x5668;&#x6A21;&#x62DF;&#x624B;&#x673A;&#x6D4F;&#x89C8;&#x5668;</a></li><li><span class="title-icon "></span><a href="#win10-&#x53CC;&#x5C4F;&#x663E;&#x793A;"><b>6.2. </b>win10 &#x53CC;&#x5C4F;&#x663E;&#x793A;</a></li><li><span class="title-icon "></span><a href="#win10-iso-&#x955C;&#x50CF;"><b>6.3. </b>win10 iso &#x955C;&#x50CF;</a></li></ul><li><span class="title-icon "></span><a href="#ps"><b>7. </b>ps</a></li><ul><li><span class="title-icon "></span><a href="#&#x5E38;&#x7528;&#x5FEB;&#x6377;&#x952E;&#xFF1A;"><b>7.1. </b>&#x5E38;&#x7528;&#x5FEB;&#x6377;&#x952E;&#xFF1A;</a></li><li><span class="title-icon "></span><a href="#&#x5236;&#x4F5C;&#x5706;&#x89D2;&#x77E9;&#x5F62;&#x56FE;&#x7247;"><b>7.2. </b>&#x5236;&#x4F5C;&#x5706;&#x89D2;&#x77E9;&#x5F62;&#x56FE;&#x7247;</a></li><li><span class="title-icon "></span><a href="#&#x56FE;&#x7247;&#x6E10;&#x53D8;&#x3001;&#x900F;&#x660E;&#x5EA6;&#x6E10;&#x53D8;"><b>7.3. </b>&#x56FE;&#x7247;&#x6E10;&#x53D8;&#x3001;&#x900F;&#x660E;&#x5EA6;&#x6E10;&#x53D8;</a></li><li><span class="title-icon "></span><a href="#ps&#x91CC;&#x600E;&#x4E48;&#x6837;&#x5C06;&#x767D;&#x8272;&#x80CC;&#x666F;&#x53BB;&#x6389;&#xFF0C;&#x53D8;&#x6210;&#x900F;&#x660E;&#x7684;&#x80CC;&#x666F;&#xFF1F;"><b>7.4. </b>PS&#x91CC;&#x600E;&#x4E48;&#x6837;&#x5C06;&#x767D;&#x8272;&#x80CC;&#x666F;&#x53BB;&#x6389;&#xFF0C;&#x53D8;&#x6210;&#x900F;&#x660E;&#x7684;&#x80CC;&#x666F;&#xFF1F;</a></li></ul><li><span class="title-icon "></span><a href="#xutils"><b>8. </b>xUtils</a></li><li><span class="title-icon "></span><a href="#butterknife"><b>9. </b>butterknife</a></li><ul><li><span class="title-icon "></span><a href="#butterknife-&#x6DFB;&#x52A0;&#x4F9D;&#x8D56;"><b>9.1. </b>butterknife &#x6DFB;&#x52A0;&#x4F9D;&#x8D56;</a></li><li><span class="title-icon "></span><a href="#butterknife-&#x4F7F;&#x7528;&#x793A;&#x8303;"><b>9.2. </b>butterknife &#x4F7F;&#x7528;&#x793A;&#x8303;</a></li></ul><li><span class="title-icon "></span><a href="#eventbus&#x3001;"><b>10. </b>EventBus&#x3001;</a></li><li><span class="title-icon "></span><a href="#rxjava-2x"><b>11. </b>RxJava 2.x</a></li><ul><li><span class="title-icon "></span><a href="#rxjava&#x7EC4;&#x6210;&#x5143;&#x7D20;"><b>11.1. </b>RxJava&#x7EC4;&#x6210;&#x5143;&#x7D20;</a></li><li><span class="title-icon "></span><a href="#rxjava-&#x5E38;&#x7528;&#x7C7B;"><b>11.2. </b>RxJava &#x5E38;&#x7528;&#x7C7B;</a></li><li><span class="title-icon "></span><a href="#rxjava20&#x4E2D;&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;"><b>11.3. </b>RxJava2.0&#x4E2D;&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;</a></li><li><span class="title-icon "></span><a href="#rxjava2&#x64CD;&#x4F5C;&#x7B26;"><b>11.4. </b>RXjava2&#x64CD;&#x4F5C;&#x7B26;</a></li><li><span class="title-icon "></span><a href="#&#x8865;&#x5145;&#x77E5;&#x8BC6;&#x70B9;"><b>11.5. </b>&#x8865;&#x5145;&#x77E5;&#x8BC6;&#x70B9;</a></li><ul><li><span class="title-icon "></span><a href="#&#x94FE;&#x5F0F;&#x8C03;&#x7528;"><b>11.5.1. </b>&#x94FE;&#x5F0F;&#x8C03;&#x7528;</a></li></ul></ul><li><span class="title-icon "></span><a href="#retrofit-2x"><b>12. </b>Retrofit 2.x</a></li><ul><li><span class="title-icon "></span><a href="#retrofit2--rxjava2--&#x4F9D;&#x8D56;"><b>12.1. </b>Retrofit2 + Rxjava2  &#x4F9D;&#x8D56;</a></li></ul><li><span class="title-icon "></span><a href="#retrofitrxjavaokhttp"><b>13. </b>Retrofit_RxJava_OkHttp</a></li><ul><li><span class="title-icon "></span><a href="#rxjava-&#x8BA2;&#x9605;&#x8005;"><b>13.1. </b>RxJava &#x8BA2;&#x9605;&#x8005;</a></li><li><span class="title-icon "></span><a href="#&#x5B9A;&#x4E49;-&#x53D1;&#x5E03;&#x8005;-&#x7684;&#x80FD;&#x529B;&#x63A5;&#x53E3;"><b>13.2. </b>&#x5B9A;&#x4E49; &#x53D1;&#x5E03;&#x8005; &#x7684;&#x80FD;&#x529B;&#x63A5;&#x53E3;</a></li><li><span class="title-icon "></span><a href="#&#x5C01;&#x88C5;&#x53D1;&#x5E03;&#x8005;"><b>13.3. </b>&#x5C01;&#x88C5;&#x53D1;&#x5E03;&#x8005;</a></li><li><span class="title-icon "></span><a href="#&#x8FDB;&#x884C;http&#x8BBF;&#x95EE;&#x7684;&#x76F8;&#x5173;&#x914D;&#x7F6E;"><b>13.4. </b>&#x8FDB;&#x884C;http&#x8BBF;&#x95EE;&#x7684;&#x76F8;&#x5173;&#x914D;&#x7F6E;</a></li><li><span class="title-icon "></span><a href="#&#x5982;&#x4F55;&#x4F7F;&#x7528;"><b>13.5. </b>&#x5982;&#x4F55;&#x4F7F;&#x7528;</a></li></ul><li><span class="title-icon "></span><a href="#react-native"><b>14. </b>react-native</a></li><li><span class="title-icon "></span><a href="#hierarchyviewer"><b>15. </b>Hierarchyviewer</a></li><li><span class="title-icon "></span><a href="#&#x6293;&#x5305;&#x5DE5;&#x5177;"><b>16. </b>&#x6293;&#x5305;&#x5DE5;&#x5177;</a></li><li><span class="title-icon "></span><a href="#&#x53CD;&#x7F16;&#x8BD1;"><b>17. </b>&#x53CD;&#x7F16;&#x8BD1;</a></li><li><span class="title-icon "></span><a href="#mac-&#x7CFB;&#x7EDF;"><b>18. </b>Mac &#x7CFB;&#x7EDF;</a></li></ul></div><a href="#intellij-idea" id="anchorNavigationExGoTop"><i class="fa fa-arrow-up"></i></a><h1 id="intellij-idea"><a name="intellij-idea" class="anchor-navigation-ex-anchor" href="#intellij-idea"><i class="fa fa-link" aria-hidden="true"></i></a>1. IntelliJ IDEA</h1>
<pre><code class="lang-text">IntelliJ IDEA &#x4E0B;&#x8F7D;&#x5730;&#x5740;&#x4E3A;
https://www.jetbrains.com/idea/download/#section=windows

IntelliJ IDEA &#x5546;&#x4E1A;&#x7248; License &#x514D;&#x8D39;&#x7533;&#x8BF7;&#x3002;
&#x7533;&#x8BF7;&#x5730;&#x5740;&#x4E3A; https://www.jetbrains.com/shop/eform/opensource?product=ALL
&#x4E00;&#x822C;&#x662F;&#x4E00;&#x5468;&#x5DE6;&#x53F3;&#x5C31;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x3002;
&#x7533;&#x8BF7;&#x6761;&#x4EF6;&#x662F;&#x81EA;&#x5DF1;&#x7684;&#x5F00;&#x6E90;&#x9879;&#x76EE;&#xFF0C; github &#x548C;gitee&#x4E0A;&#x7684;&#x90FD;&#x53EF;&#x4EE5;&#x3002;
&#x6211;&#x7528;&#x7684;&#x5C31;&#x662F;&#x6258;&#x7BA1;&#x5728; gitee&#x4E0A;&#x7684;&#x5F00;&#x6E90;&#x9879;&#x76EE;&#x3002;

&#x8BB8;&#x53EF;&#x8BC1;&#x7684;&#x6709;&#x6548;&#x5468;&#x671F;&#x4E3A;&#x4E00;&#x5E74; 
They are valid for one year. 
You will receive an automatic email reminder shortly before the license expiration date.

&#x6839;&#x636E;&#x6536;&#x5230;&#x7684;&#x90AE;&#x4EF6;&#x8FDB;&#x5165;&#x6388;&#x6743;&#x9875;&#x9762;&#xFF0C;&#x70B9;&#x51FB; Assign &#x6388;&#x6743;&#x7ED9;&#x4F60;&#x6307;&#x5B9A;&#x7684;&#x8D26;&#x53F7;&#x3002;
&#x7136;&#x540E;&#x6253;&#x5F00; IntelliJ IDEA &#x5C31;&#x884C;&#x4F7F;&#x7528;&#x5373;&#x53EF;&#x3002;
</code></pre>
<p><img src="../pics/ideaLicense.png" alt=""></p>
<h1 id="androidstudio"><a name="androidstudio" class="anchor-navigation-ex-anchor" href="#androidstudio"><i class="fa fa-link" aria-hidden="true"></i></a>2. Androidstudio</h1>
<p>&#x5B89;&#x88C5;&#x6216;&#x66F4;&#x65B0;&#x540E;&#x63D2;&#x4EF6;&#x540E;&#x90FD;&#x9700;&#x8981;&#x91CD;&#x542F; Androidstudio &#x3002;
<a href="https://developer.android.com/studio/index.html" target="_blank">Androidstudio&#x4E0B;&#x8F7D;</a></p>
<h2 id="androidstudio-&#x81EA;&#x52A8;&#x4EE3;&#x7801;&#x8865;&#x5168;&#x914D;&#x7F6E;"><a name="androidstudio-&#x81EA;&#x52A8;&#x4EE3;&#x7801;&#x8865;&#x5168;&#x914D;&#x7F6E;" class="anchor-navigation-ex-anchor" href="#androidstudio-&#x81EA;&#x52A8;&#x4EE3;&#x7801;&#x8865;&#x5168;&#x914D;&#x7F6E;"><i class="fa fa-link" aria-hidden="true"></i></a>2.1. Androidstudio &#x81EA;&#x52A8;&#x4EE3;&#x7801;&#x8865;&#x5168;&#x914D;&#x7F6E;</h2>
<pre><code class="lang-text">&#x901A;&#x8FC7;&#x8F93;&#x5165;&#x5FEB;&#x6377;&#x952E;&#xFF0C;&#x81EA;&#x52A8;&#x8865;&#x5168;&#x6A21;&#x677F;&#x4EE3;&#x7801;&#xFF0C;
&#x4F8B;&#x5982; &#x8F93;&#x5165; &quot;todo&quot; , &#x5C31;&#x53EF;&#x4EE5;&#x81EA;&#x52A8;&#x751F;&#x6210; &quot;// TODO: 2021/2/4  &quot; 

ctrl + J  &#x5FEB;&#x901F;&#x67E5;&#x770B; Live Templates
&#x6253;&#x5F00; &quot;&#x8BBE;&#x7F6E; -&gt; Editor -&gt; Live Templates&quot;&#xFF0C;
&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x9ED8;&#x8BA4;&#x5DF2;&#x7ECF;&#x6709;&#x5F88;&#x591A;&quot;Live Templates&quot; &#xFF0C;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x4FEE;&#x6539;&#x3002;

&#x5BFC;&#x5165;&#x539F;&#x6709;&#x7684;&#x6A21;&#x677F;&#xFF1A;
&#x5C06;&#x6587;&#x4EF6;&#x66FF;&#x6362;&#x5373;&#x53EF; &#xFF08;C:\Users\kaifa4k\.AndroidStudio2.2 &#x662F;&#x4F60;&#x81EA;&#x5DF1;&#x7684;&#x5B89;&#x88C5;&#x8DEF;&#x5F84;&#xFF09;
C:\Users\kaifa4k\.AndroidStudio2.2\config\templates
</code></pre>
<h2 id="codeglance"><a name="codeglance" class="anchor-navigation-ex-anchor" href="#codeglance"><i class="fa fa-link" aria-hidden="true"></i></a>2.2. CodeGlance</h2>
<p>&#x4EE3;&#x7801;&#x5FEB;&#x901F;&#x5B9A;&#x4F4D; &#x63D2;&#x4EF6;</p>
<p><img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/osChina__CodeGlance.png" alt=""></p>
<h2 id="android-resource-usage-count"><a name="android-resource-usage-count" class="anchor-navigation-ex-anchor" href="#android-resource-usage-count"><i class="fa fa-link" aria-hidden="true"></i></a>2.3. Android-Resource-Usage-Count</h2>
<p>&#x663E;&#x793A; Android &#x8D44;&#x6E90;&#x4F7F;&#x7528;&#x7684;&#x6B21;&#x6570;&#x3002;</p>
<p><img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/osChina__Android-Resource-Usage-Count.png" alt=""></p>
<h2 id="&#x7FFB;&#x8BD1;&#x63D2;&#x4EF6;ectranslation"><a name="&#x7FFB;&#x8BD1;&#x63D2;&#x4EF6;ectranslation" class="anchor-navigation-ex-anchor" href="#&#x7FFB;&#x8BD1;&#x63D2;&#x4EF6;ectranslation"><i class="fa fa-link" aria-hidden="true"></i></a>2.4. &#x7FFB;&#x8BD1;&#x63D2;&#x4EF6;ECTranslation</h2>
<p>&#x539F;&#x7406;&#x662F;&#x8C03;&#x7528;&#x4E86;&#x6709;&#x9053;&#x8BCD;&#x5178;&#x7684;API &#x3002;&#x53EF;&#x4EE5;&#x81EA;&#x5B9A;&#x4E49; &#x5FEB;&#x6377;&#x65B9;&#x5F0F;&#xFF0C;&#x6211;&#x76EE;&#x524D;&#x8BBE;&#x7F6E;&#x7684;&#x662F; alt + m</p>
<pre><code class="lang-text">&#x5FEB;&#x6377;&#x952E;&#x8BBE;&#x7F6E;
Preferences -&gt; Keymap -&gt; &#x641C;&#x7D22;Translate - &gt; &#x53F3;&#x952E; add Keyboard Shortcut. &#x8F93;&#x5165;&#x4F60;&#x60F3;&#x8981;&#x7684;&#x5FEB;&#x6377;&#x952E;&#x3002;
</code></pre>
<p><img src="https://gitee.com/hnyer/filesOfGitbook/raw/master/files/osChina__ECTranslation.png" alt=""></p>
<h2 id="android-parcelable-code-generator"><a name="android-parcelable-code-generator" class="anchor-navigation-ex-anchor" href="#android-parcelable-code-generator"><i class="fa fa-link" aria-hidden="true"></i></a>2.5. Android Parcelable code generator</h2>
<p>&#x81EA;&#x52A8;&#x751F;&#x6210; Parcelable&#x63A5;&#x53E3;&#x76F8;&#x5173;&#x7684;&#x4EE3;&#x7801;&#x3002;</p>
<pre><code class="lang-text">public class FtpThumDownListInfo implements Parcelable{
    /**&#x5F53;&#x524D;&#x8FD9;&#x4E2A;&#x6307;&#x9488; &#x6307;&#x5411;&#x7684;&#x6587;&#x4EF6;&#x9700;&#x8981;&#x4E0B;&#x8F7D;*/
    private int gotoDownFileIndex = 0;
    /**&#x9700;&#x8981;&#x4E0B;&#x8F7D;&#x7684;&#x6587;&#x4EF6;&#x5217;&#x8868;- &#x8FD9;&#x4E2A;&#x5217;&#x8868;&#x4F1A;&#x5206;&#x6279;&#x6B21;&#x589E;&#x52A0; */
    private List&lt;FTPFile&gt; ftpNeddLoadList =null  ;
    /**&#x4E0B;&#x8F7D;&#x597D;&#x7684;&#x6587;&#x4EF6;&#x7684;byte[]*/
    private List&lt;FTPFile&gt; ftpDowndBytesList =null  ;

    //&#x4EE5;&#x4E0B;&#x4EE3;&#x7801;&#x662F; &#x7528;&#x63D2;&#x4EF6;&#x81EA;&#x52A8;&#x751F;&#x6210;&#x7684;  start
    protected FtpThumDownListInfo(Parcel in){
        this.gotoDownFileIndex = in.readInt();
        this.ftpNeddLoadList = new ArrayList&lt;FTPFile&gt;();
        in.readList(this.ftpNeddLoadList, FTPFile.class.getClassLoader());
        this.ftpDowndBytesList = new ArrayList&lt;FTPFile&gt;();
        in.readList(this.ftpDowndBytesList, FTPFile.class.getClassLoader());
    }

    /**
     * &#x5185;&#x5BB9;&#x63A5;&#x53E3;&#x63CF;&#x8FF0;&#xFF0C;&#x9ED8;&#x8BA4;&#x8FD4;&#x56DE;0&#x5C31;&#x53EF;&#x4EE5;&#x4E86;
     */
    @Override
    public int describeContents(){
        return 0;
    }


    @Override
    public void writeToParcel(Parcel dest, int flags){
        dest.writeInt(this.gotoDownFileIndex);
        dest.writeList(this.ftpNeddLoadList);
        dest.writeList(this.ftpDowndBytesList);
    }

    /**
       &#x5B9E;&#x4F8B;&#x5316;&#x9759;&#x6001;&#x5185;&#x90E8;&#x5BF9;&#x8C61;
     * &#x63A5;&#x53E3;&#x5BF9;&#x8C61;&#x540D;&#x5FC5;&#x987B;&#x4E3A;CREATOR.
     * &#x5FC5;&#x987B;&#x6309;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x58F0;&#x660E;&#x7684;&#x987A;&#x5E8F;&#x8BFB;&#x53D6;&#x6570;&#x636E;
     */
    public static final Parcelable.Creator&lt;FtpThumDownListInfo&gt; CREATOR = new Parcelable.Creator&lt;FtpThumDownListInfo&gt;()  {
        @Override
        public FtpThumDownListInfo createFromParcel(Parcel source)  {
            return new FtpThumDownListInfo(source);
        }

        @Override
        public FtpThumDownListInfo[] newArray(int size)  {
            return new FtpThumDownListInfo[size];
        }
    };

    // &#x4EE5;&#x4E0B;&#x4EE3;&#x7801;&#x662F; &#x7528;&#x63D2;&#x4EF6;&#x81EA;&#x52A8;&#x751F;&#x6210;&#x7684; end
}


//&#x8D4B;&#x503C;
Bundle mBundle = new Bundle();
mBundle.putParcelable(&quot;picBean&quot;,picBean);  
intentToMatch.putExtras(mBundle);
//&#x83B7;&#x53D6;&#xFF1A;
RecommendPicBean picBean = (RecommendPicBean)getIntent().getParcelableExtra(&quot;picBean&quot;);
</code></pre>
<h2 id="&#x65E0;&#x7EBF;&#x8C03;&#x8BD5;-adb-wifi"><a name="&#x65E0;&#x7EBF;&#x8C03;&#x8BD5;-adb-wifi" class="anchor-navigation-ex-anchor" href="#&#x65E0;&#x7EBF;&#x8C03;&#x8BD5;-adb-wifi"><i class="fa fa-link" aria-hidden="true"></i></a>2.6. &#x65E0;&#x7EBF;&#x8C03;&#x8BD5; ADB WIFI</h2>
<pre><code class="lang-text">&#x534E;&#x4E3A;M2 &#xFF0C;&#x65E0;Root
1&#x3001; &#x786E;&#x4FDD;&#x7535;&#x8111;&#x548C;&#x624B;&#x673A;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x5C40;&#x57DF;&#x7F51;
2&#x3001;&#x63D2;&#x4E0A;USB&#x7EBF; &#x8FDE;&#x4E0A;adb
3&#x3001;adb tcpip 5555 ( 5555&#x4E3A;&#x7AEF;&#x53E3;&#x53F7;&#xFF0C;&#x53EF;&#x81EA;&#x7531;&#x6307;&#x5B9A;&#xFF09;
4&#x3001;adb connect 192.168.x.x:5555

// &#x5982;&#x679C;&#x662F;&#x60F3;&#x540C;&#x65F6;&#x8FDE;&#x63A5;&#x591A;&#x4E2A;&#x8BBE;&#x5907;
&gt; adb devices   // &#x627E;&#x5230;&#x8BBE;&#x5907;&#x53F7;

adb -s &#x8BBE;&#x5907;&#x53F7; &#x6307;&#x4EE4;  // &#x4F7F;&#x7528; -s &#x53C2;&#x6570;&#x6307;&#x5B9A;&#x8BBE;&#x5907;&#x53F7;
</code></pre>
<h2 id="&#x5E03;&#x5C40;&#x67E5;&#x770B;&#x5668;"><a name="&#x5E03;&#x5C40;&#x67E5;&#x770B;&#x5668;" class="anchor-navigation-ex-anchor" href="#&#x5E03;&#x5C40;&#x67E5;&#x770B;&#x5668;"><i class="fa fa-link" aria-hidden="true"></i></a>2.7. &#x5E03;&#x5C40;&#x67E5;&#x770B;&#x5668;</h2>
<pre><code class="lang-text">&#x53EF;&#x4EE5;&#x7528; Androidstudio &#x81EA;&#x5E26;&#x5DE5;&#x5177;&#x67E5;&#x770B; DecorView&#x7684;&#x5E03;&#x5C40;&#x3002;
Tools -&gt; Layout Inspector
</code></pre>
<h2 id="&#x751F;&#x6210;&#x6587;&#x6863;-javadoc"><a name="&#x751F;&#x6210;&#x6587;&#x6863;-javadoc" class="anchor-navigation-ex-anchor" href="#&#x751F;&#x6210;&#x6587;&#x6863;-javadoc"><i class="fa fa-link" aria-hidden="true"></i></a>2.8. &#x751F;&#x6210;&#x6587;&#x6863; JavaDoc</h2>
<pre><code class="lang-text">&#x627E;&#x5230;&#x5DE5;&#x5177;&#x680F;&#x4E0A;&#x7684; Tools&#xFF0C;&#x9009;&#x62E9; Generate JavaDoc
&#x5982;&#x679C;&#x51FA;&#x73B0;&#x7F16;&#x7801;&#x9519;&#x8BEF;&#x63D0;&#x793A;&#xFF0C;&#x5219;&#x5728; Other command line arguments &#x4E2D;&#x6DFB;&#x52A0; -encoding utf-8 -charset utf-8
</code></pre>
<h2 id="&#x5355;&#x884C;&#x6CE8;&#x91CA;"><a name="&#x5355;&#x884C;&#x6CE8;&#x91CA;" class="anchor-navigation-ex-anchor" href="#&#x5355;&#x884C;&#x6CE8;&#x91CA;"><i class="fa fa-link" aria-hidden="true"></i></a>2.9. &#x5355;&#x884C;&#x6CE8;&#x91CA;</h2>
<pre><code class="lang-text">androidstudio &#x5355;&#x884C;&#x6CE8;&#x91CA;&#x9ED8;&#x8BA4;&#x662F;&#x4ECE;&#x7B2C;&#x4E00;&#x5217;&#x5F00;&#x59CB;&#x7684;&#x3002;
&#x5982;&#x679C;&#x9700;&#x8981;&#x6539;&#x6210;&#x4ECE;&#x4EE3;&#x7801;&#x5217;&#x5F00;&#x59CB;&#xFF0C;&#x53EF;&#x4EE5;&#x914D;&#x7F6E;&#xFF1A;
Settings &#x2192; Editor &#x2192; Code Style &#x2192; JAVA. Select &quot;Code Generation&quot; tab 
&#x7136;&#x540E;&#x628A; &quot;Line comment at first column&quot;&#x53BB;&#x6389;&#x5373;&#x53EF;&#xFF0C;&#x6CE8;&#x610F;&#x8981;&#x627E;&#x5230;&quot;Code Generation&quot; tab&#x9875;&#x624D;&#x884C; &#x3002;
</code></pre>
<h2 id="&#x591A;&#x884C;&#x6CE8;&#x91CA;&#x5FEB;&#x6377;&#x952E;"><a name="&#x591A;&#x884C;&#x6CE8;&#x91CA;&#x5FEB;&#x6377;&#x952E;" class="anchor-navigation-ex-anchor" href="#&#x591A;&#x884C;&#x6CE8;&#x91CA;&#x5FEB;&#x6377;&#x952E;"><i class="fa fa-link" aria-hidden="true"></i></a>2.10. &#x591A;&#x884C;&#x6CE8;&#x91CA;&#x5FEB;&#x6377;&#x952E;</h2>
<pre><code class="lang-text">Ctrl+Shift+/   

// idea&#x5C06;&#x5355;&#x884C;&#x6CE8;&#x91CA;&#x66FF;&#x6362;&#x4E3A;&#x591A;&#x884C;&#x6CE8;&#x91CA;
&#x5339;&#x914D;&#x6B63;&#x5219;
// +(.*$)   ----------&gt;       /**\n   * $1\n   */
</code></pre>
<h2 id="&#x4EE3;&#x7801;&#x6298;&#x53E0;"><a name="&#x4EE3;&#x7801;&#x6298;&#x53E0;" class="anchor-navigation-ex-anchor" href="#&#x4EE3;&#x7801;&#x6298;&#x53E0;"><i class="fa fa-link" aria-hidden="true"></i></a>2.11. &#x4EE3;&#x7801;&#x6298;&#x53E0;</h2>
<pre><code class="lang-text">&#x53EF;&#x4EE5;&#x628A;&#x76F8;&#x5173;&#x7684;&#x4EE3;&#x7801;&#x653E;&#x5728;&#x4E00;&#x7EC4; region &#x4E2D;&#xFF0C;
&#x8FD9;&#x6837;&#x8FD9;&#x7EC4;&#x4EE3;&#x7801;&#x5C31;&#x53EF;&#x4EE5;&#x6536;&#x8D77;&#x548C;&#x5C55;&#x5F00;&#x3002;

// region &#x5E03;&#x5C40;&#x6D4B;&#x8BD5;
...... &#x8FD9;&#x662F;&#x4EE3;&#x7801;...
// endregion &#x5E03;&#x5C40;&#x6D4B;&#x8BD5;
</code></pre>
<h2 id="&#x914D;&#x7F6E;&#x4F5C;&#x8005;&#x6A21;&#x677F;"><a name="&#x914D;&#x7F6E;&#x4F5C;&#x8005;&#x6A21;&#x677F;" class="anchor-navigation-ex-anchor" href="#&#x914D;&#x7F6E;&#x4F5C;&#x8005;&#x6A21;&#x677F;"><i class="fa fa-link" aria-hidden="true"></i></a>2.12. &#x914D;&#x7F6E;&#x4F5C;&#x8005;&#x6A21;&#x677F;</h2>
<pre><code class="lang-text">/** 
 * @author Aivin
 * created on ${DATE}
 * des: 
 */
</code></pre>
<p><img src="../pics/author&#x8BBE;&#x7F6E;.png" alt=""></p>
<h2 id="bookmark-&#x4E66;&#x7B7E;"><a name="bookmark-&#x4E66;&#x7B7E;" class="anchor-navigation-ex-anchor" href="#bookmark-&#x4E66;&#x7B7E;"><i class="fa fa-link" aria-hidden="true"></i></a>2.13. BookMark &#x4E66;&#x7B7E;</h2>
<pre><code class="lang-text">&#x505A;&#x9879;&#x76EE;&#x96BE;&#x514D;&#x6765;&#x56DE;&#x67E5;&#x770B;&#x67D0;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x67D0;&#x4E2A;&#x65B9;&#x6CD5;&#xFF0C;&#x67D0;&#x4E9B;&#x6587;&#x4EF6;&#x53EF;&#x80FD;&#x8BBF;&#x95EE;&#x7387;&#x5F88;&#x9AD8;&#xFF0C;
&#x4E3A;&#x4E86;&#x52A0;&#x5FEB;&#x5F00;&#x53D1;&#x6548;&#x7387;&#x697C;&#x4E3B;&#x63A8;&#x8350;&#x4F7F;&#x7528; favorites  &#x6587;&#x4EF6; , bookmark &#x4EE3;&#x7801;&#x884C; ,

favorites &#x7684;&#x6DFB;&#x52A0;&#x5C31;&#x518D;&#x6587;&#x4EF6;&#x5355;&#x51FB;&#x53F3;&#x952E; add to favorites &#x5373;&#x53EF;&#x3002;
&#x6DFB;&#x52A0;&#x4E66;&#x7B7E; // &#x5355;&#x51FB; f11 (&#x7B14;&#x8BB0;&#x672C;&#x9700;&#x8981; fn ) 
&#x67E5;&#x770B;&#x4E66;&#x7B7E; //  shift+f11 (&#x7B14;&#x8BB0;&#x672C;&#x9700;&#x8981; fn ) 

&#x6BD4;&#x8F83;&#x9057;&#x61BE;&#x7684;&#x662F;&#xFF0C;&#x76EE;&#x524D;(20211122) Androidstudio&#x8FD8;&#x4E0D;&#x652F;&#x6301;&#x5BFC;&#x51FA;&#x6216;&#x540C;&#x6B65;&#x4E66;&#x7B7E;&#xFF0C;&#x4EE5;&#x4FBF;&#x5206;&#x4EAB;&#x5230;&#x5176;&#x4ED6;&#x540C;&#x4E8B;&#x3002;
</code></pre>
<h2 id="androidstudio-&#x5FEB;&#x901F;&#x5220;&#x9664;&#x65E0;&#x7528;&#x7684;-import"><a name="androidstudio-&#x5FEB;&#x901F;&#x5220;&#x9664;&#x65E0;&#x7528;&#x7684;-import" class="anchor-navigation-ex-anchor" href="#androidstudio-&#x5FEB;&#x901F;&#x5220;&#x9664;&#x65E0;&#x7528;&#x7684;-import"><i class="fa fa-link" aria-hidden="true"></i></a>2.14. androidstudio &#x5FEB;&#x901F;&#x5220;&#x9664;&#x65E0;&#x7528;&#x7684; import</h2>
<pre><code class="lang-text">Code --&gt; Optimize Imports
</code></pre>
<h2 id="&#x4FEE;&#x6539;-android---gradle-&#x7684;&#x9ED8;&#x8BA4;&#x4F4D;&#x7F6E;"><a name="&#x4FEE;&#x6539;-android---gradle-&#x7684;&#x9ED8;&#x8BA4;&#x4F4D;&#x7F6E;" class="anchor-navigation-ex-anchor" href="#&#x4FEE;&#x6539;-android---gradle-&#x7684;&#x9ED8;&#x8BA4;&#x4F4D;&#x7F6E;"><i class="fa fa-link" aria-hidden="true"></i></a>2.15. &#x4FEE;&#x6539; .android /  .gradle &#x7684;&#x9ED8;&#x8BA4;&#x4F4D;&#x7F6E;</h2>
<pre><code class="lang-text">C:\Users\&#x4F60;&#x7684;&#x540D;&#x5B57; 
&#x4E0B;&#x9ED8;&#x8BA4;&#x4F1A;&#x6709;  .android &#x548C; .gradle &#x6587;&#x4EF6;&#x5939;&#xFF0C; &#x4F1A;&#x5360;&#x7528;&#x5927;&#x91CF;&#x7684;C&#x76D8;&#x7A7A;&#x95F4;&#x3002;
.android  &#x662F;Android SDK&#x751F;&#x6210;&#x7684; AVD(Android Virtual Device Manager)&#xFF0C;&#x5373;&#x6A21;&#x62DF;&#x5668;&#x5B58;&#x653E;&#x8DEF;&#x5F84; &#x3002;
&#x4F60;&#x5982;&#x679C;&#x4E0D;&#x7528;&#x6A21;&#x62DF;&#x5668;&#xFF0C;&#x5220;&#x6389;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#x5373;&#x53EF;&#x3002;
1&#x3001;&#x4FEE;&#x6539; .android &#x9ED8;&#x8BA4;&#x8DEF;&#x5F84;&#x4F1A;&#x7A0D;&#x5FAE;&#x9EBB;&#x70E6;&#x4E00;&#x70B9;&#x3002;
&#x6211;&#x4E0D;&#x9002;&#x7528;&#x6A21;&#x62DF;&#x5668;&#xFF0C;&#x61D2;&#x5F97;&#x505A;&#x7B14;&#x8BB0;&#x4E86;&#xFF0C;&#x9700;&#x8981;&#x7684;&#x53BB;&#x767E;&#x5EA6;&#x4E00;&#x4E0B;&#x5373;&#x53EF;&#x3002;

2&#x3001;&#x4FEE;&#x6539; .gradle &#x7684;&#x9ED8;&#x8BA4;&#x8DEF;&#x5F84;&#x6BD4;&#x8F83;&#x7B80;&#x5355; &#xFF0C;&#x5728; Androidstudio &#x4E2D;&#x6307;&#x5B9A;&#x8DEF;&#x5F84;&#x5C31;&#x53EF;&#x4EE5;&#x4E86;&#x3002;
.gradle &#x662F;Androidstudio &#x9ED8;&#x8BA4;&#x7F13;&#x5B58; gradle &#x7684;&#x8DEF;&#x5F84;&#x3002;
</code></pre>
<p><img src="../pics/gradle&#x9ED8;&#x8BA4;&#x8DEF;&#x5F84;.png" alt=""></p>
<h1 id="git&#x64CD;&#x4F5C;"><a name="git&#x64CD;&#x4F5C;" class="anchor-navigation-ex-anchor" href="#git&#x64CD;&#x4F5C;"><i class="fa fa-link" aria-hidden="true"></i></a>3. git&#x64CD;&#x4F5C;</h1>
<h2 id="&#x914D;&#x7F6E;&#x5168;&#x5C40;&#x4FE1;&#x606F;"><a name="&#x914D;&#x7F6E;&#x5168;&#x5C40;&#x4FE1;&#x606F;" class="anchor-navigation-ex-anchor" href="#&#x914D;&#x7F6E;&#x5168;&#x5C40;&#x4FE1;&#x606F;"><i class="fa fa-link" aria-hidden="true"></i></a>3.1. &#x914D;&#x7F6E;&#x5168;&#x5C40;&#x4FE1;&#x606F;</h2>
<pre><code class="lang-text">git config --global user.name &quot;aivin666@qq.com&quot;
git config --global user.email &quot;aivin666@qq.com&quot;
git config --list //&#x67E5;&#x770B;&#x5F53;&#x524D;&#x7528;&#x6237;&#x4FE1;&#x606F;
</code></pre>
<h2 id="&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5206;&#x652F;"><a name="&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5206;&#x652F;" class="anchor-navigation-ex-anchor" href="#&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5206;&#x652F;"><i class="fa fa-link" aria-hidden="true"></i></a>3.2. &#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5206;&#x652F;</h2>
<pre><code class="lang-text">git clone  -b &#x5206;&#x652F;&#x540D;&#x79F0;  https://xxxx.git
</code></pre>
<h2 id="&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5386;&#x53F2;&#x7248;&#x672C;"><a name="&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5386;&#x53F2;&#x7248;&#x672C;" class="anchor-navigation-ex-anchor" href="#&#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5386;&#x53F2;&#x7248;&#x672C;"><i class="fa fa-link" aria-hidden="true"></i></a>3.3. &#x62C9;&#x53D6;&#x6307;&#x5B9A;&#x5386;&#x53F2;&#x7248;&#x672C;</h2>
<pre><code class="lang-text">1&#x3001;&#x627E;&#x5230;&#x5386;&#x53F2;&#x7248;&#x672C;&#xFF0C;&#x83B7;&#x53D6;&#x5BF9;&#x5E94;&#x7684;&#x7248;&#x672C;&#x7F16;&#x53F7;
2&#x3001;git checkout xxxxx
</code></pre>
<p><img src="../pics/git&#x5386;&#x53F2;&#x7248;&#x672C;.png" alt=""></p>
<h2 id="git-&#x6587;&#x4EF6;&#x72B6;&#x6001;"><a name="git-&#x6587;&#x4EF6;&#x72B6;&#x6001;" class="anchor-navigation-ex-anchor" href="#git-&#x6587;&#x4EF6;&#x72B6;&#x6001;"><i class="fa fa-link" aria-hidden="true"></i></a>3.4. git &#x6587;&#x4EF6;&#x72B6;&#x6001;</h2>
<pre><code class="lang-text">Git&#x4E2D;&#x6587;&#x4EF6;&#x5927;&#x6982;&#x5206;&#x4E3A;&#x4E09;&#x79CD;&#x72B6;&#x6001;&#xFF1A;&#x5DF2;&#x4FEE;&#x6539;&#xFF08;modified&#xFF09;&#x3001;&#x5DF2;&#x6682;&#x5B58;&#xFF08;staged&#xFF09;&#x3001;&#x5DF2;&#x63D0;&#x4EA4;&#xFF08;committed&#xFF09;

&#x4FEE;&#x6539;&#xFF1A;Git&#x53EF;&#x4EE5;&#x611F;&#x77E5;&#x5230;&#x5DE5;&#x4F5C;&#x76EE;&#x5F55;&#x4E2D;&#x54EA;&#x4E9B;&#x6587;&#x4EF6;&#x88AB;&#x4FEE;&#x6539;&#x4E86;&#xFF0C;&#x7136;&#x540E;&#x628A;&#x4FEE;&#x6539;&#x7684;&#x6587;&#x4EF6;&#x52A0;&#x5165;&#x5230; modified &#x533A;&#x57DF;

&#x6682;&#x5B58;&#xFF1A;&#x901A;&#x8FC7; add &#x547D;&#x4EE4;&#x5C06;&#x5DE5;&#x4F5C;&#x76EE;&#x5F55;&#x4E2D;&#x4FEE;&#x6539;&#x7684;&#x6587;&#x4EF6;&#x63D0;&#x4EA4;&#x5230;&#x6682;&#x5B58;&#x533A;&#xFF0C;&#x7B49;&#x5019;&#x88AB; commit

&#x63D0;&#x4EA4;&#xFF1A;&#x5C06;&#x6682;&#x5B58;&#x533A;&#x6587;&#x4EF6;commit&#x81F3;Git&#x76EE;&#x5F55;&#x4E2D;&#x6C38;&#x4E45;&#x4FDD;&#x5B58;
</code></pre>
<h2 id="git-&#x7684;-head-&#x6982;&#x5FF5;"><a name="git-&#x7684;-head-&#x6982;&#x5FF5;" class="anchor-navigation-ex-anchor" href="#git-&#x7684;-head-&#x6982;&#x5FF5;"><i class="fa fa-link" aria-hidden="true"></i></a>3.5. git &#x7684; HEAD &#x6982;&#x5FF5;</h2>
<pre><code class="lang-text">HEAD &#x662F;Git&#x4E2D;&#x975E;&#x5E38;&#x91CD;&#x8981;&#x7684;&#x4E00;&#x4E2A;&#x6982;&#x5FF5;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x79F0;&#x5B83;&#x4E3A;&#x6307;&#x9488;&#x6216;&#x5F15;&#x7528;&#xFF0C;
HEAD &#x53EF;&#x4EE5;&#x6307;&#x5411;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;&#x8282;&#x70B9;&#xFF0C;&#x5E76;&#x4E14;&#x6307;&#x5411;&#x7684;&#x8282;&#x70B9;&#x59CB;&#x7EC8;&#x4E3A;&#x5F53;&#x524D;&#x5DE5;&#x4F5C;&#x76EE;&#x5F55; &#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x4F60;&#x6240;&#x770B;&#x5230;&#x7684;&#x4EE3;&#x7801; &#x5C31;&#x662F;HEAD&#x6307;&#x5411;&#x7684; &#x8282;&#x70B9; &#x3002;
</code></pre>
<h2 id="&#x6DFB;&#x52A0;&#x4E2A;&#x4EBA;&#x79C1;&#x94A5;&#x5230;&#x7F51;&#x7AD9;"><a name="&#x6DFB;&#x52A0;&#x4E2A;&#x4EBA;&#x79C1;&#x94A5;&#x5230;&#x7F51;&#x7AD9;" class="anchor-navigation-ex-anchor" href="#&#x6DFB;&#x52A0;&#x4E2A;&#x4EBA;&#x79C1;&#x94A5;&#x5230;&#x7F51;&#x7AD9;"><i class="fa fa-link" aria-hidden="true"></i></a>3.6. &#x6DFB;&#x52A0;&#x4E2A;&#x4EBA;&#x79C1;&#x94A5;&#x5230;&#x7F51;&#x7AD9;</h2>
<p>&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#x65E0;&#x9700;&#x914D;&#x7F6E;&#x5BC6;&#x7801; - window10&#x4E0B;&#x6D4B;&#x8BD5;</p>
<pre><code class="lang-text">1&#x3001;&#x751F;&#x6210;&#x5BF9;&#x5E94;&#x7684;&#x6587;&#x4EF6;
ssh-keygen -t rsa -C &apos;aivin666@qq.com&apos;
2&#x3001;&#x5C06; id_rsa.pub &#x91CC;&#x9762;&#x7684;&#x5185;&#x5BB9;&#x586B;&#x5199;&#x5230;&#x7F51;&#x7AD9;&#x4E0A;&#x3002;
3&#x3001;&#x6D4B;&#x8BD5;&#x662F;&#x5426;&#x6210;&#x529F; &#x3002;
ssh -T git@gitee.com
</code></pre>
<h2 id="&#x914D;&#x7F6E;&#x5BC6;&#x7801;&#x65B9;&#x5F0F;--ubuntu&#x4E0B;&#x6D4B;&#x8BD5;"><a name="&#x914D;&#x7F6E;&#x5BC6;&#x7801;&#x65B9;&#x5F0F;--ubuntu&#x4E0B;&#x6D4B;&#x8BD5;" class="anchor-navigation-ex-anchor" href="#&#x914D;&#x7F6E;&#x5BC6;&#x7801;&#x65B9;&#x5F0F;--ubuntu&#x4E0B;&#x6D4B;&#x8BD5;"><i class="fa fa-link" aria-hidden="true"></i></a>3.7. &#x914D;&#x7F6E;&#x5BC6;&#x7801;&#x65B9;&#x5F0F;  Ubuntu&#x4E0B;&#x6D4B;&#x8BD5;</h2>
<p>https&#x6A21;&#x5F0F;&#xFF0C;&#x6BCF;&#x6B21;&#x63D0;&#x4EA4;&#x90FD;&#x9700;&#x8981;&#x8F93;&#x5165;&#x5BC6;&#x7801;&#x3002;</p>
<pre><code class="lang-text">1&#x3001;&#x5728;&#x4E00;&#x4E2A;&#x65B0;&#x76EE;&#x5F55; &#x521D;&#x59CB;&#x5316;
git init

2&#x3001;&#x5C06;&#x8FDC;&#x7A0B;&#x4EE3;&#x7801;&#x62C9;&#x5012;&#x672C;&#x5730;
git pull https://gitee.com/hnyer/java_android.git

3&#x3001;&#x5173;&#x8054;&#x8FDC;&#x7A0B;&#x7AEF;&#x4ED3;&#x5E93;
master &#x662F;&#x8FDC;&#x7A0B;&#x7AEF;&#x7684;&#x4E00;&#x4E2A;&#x652F;&#x8DEF;&#x3002;
git remote add master https://gitee.com/hnyer/java_android.git
// git remote rm master , &#x5220;&#x9664;&#x5173;&#x8054;

4&#x3001; &#x5C06;&#x672C;&#x5730;&#x6307;&#x5B9A;&#x7684;&#x7248;&#x672C;&#x63A8;&#x9001;&#x5230;&#x8FDC;&#x7A0B;&#x7AEF;&#x6307;&#x5B9A;&#x7684;&#x7248;&#x672C;
&#x7684;&#x4E00;&#x4E2A;maser&#x662F;&#x8FDC;&#x7A0B;&#x7684; &#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x662F;&#x672C;&#x5730;&#x7684;
git push -u master master

5&#x3001;&#x4EE5;&#x540E;&#x4E0D;&#x7528;&#x6BCF;&#x6B21;&#x90FD;&#x7528;&#x53C2;&#x6570; u ,&#x76F4;&#x63A5; git push &#x5373;&#x53EF;
</code></pre>
<h2 id="ubuntu&#x4E0B;-ssh-&#x914D;&#x7F6E;-&#x7801;&#x4E91;"><a name="ubuntu&#x4E0B;-ssh-&#x914D;&#x7F6E;-&#x7801;&#x4E91;" class="anchor-navigation-ex-anchor" href="#ubuntu&#x4E0B;-ssh-&#x914D;&#x7F6E;-&#x7801;&#x4E91;"><i class="fa fa-link" aria-hidden="true"></i></a>3.8. Ubuntu&#x4E0B; SSH &#x914D;&#x7F6E; &#x7801;&#x4E91;</h2>
<pre><code class="lang-text">1&#x3001;&#x8FDB;&#x5165; /home/&#x7528;&#x6237;&#x540D;/.ssh &#x76EE;&#x5F55;&#x4E0B; &#x751F;&#x6210;&#x516C;&#x94A5;
ssh-keygen -t rsa -C &quot;your_email@example.com&quot;

2&#x3001;&#x5C06; id_rsa.pub &#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x5185;&#x5BB9;&#x586B;&#x5165;&#x7801;&#x4E91;&#x7F51;&#x7AD9;&#x4E2D; &#x3002;
3&#x3001;&#x5373;&#x53EF;&#x6B63;&#x5E38;&#x62C9;&#x53D6; &#x3001;&#x63D0;&#x4EA4;
</code></pre>
<h2 id="git-&#x6709;&#x65F6;&#x4F1A;&#x628A;&#x672C;&#x5730;&#x4EE3;&#x7801;&#x8986;&#x76D6;&#x6389;"><a name="git-&#x6709;&#x65F6;&#x4F1A;&#x628A;&#x672C;&#x5730;&#x4EE3;&#x7801;&#x8986;&#x76D6;&#x6389;" class="anchor-navigation-ex-anchor" href="#git-&#x6709;&#x65F6;&#x4F1A;&#x628A;&#x672C;&#x5730;&#x4EE3;&#x7801;&#x8986;&#x76D6;&#x6389;"><i class="fa fa-link" aria-hidden="true"></i></a>3.9. git &#x6709;&#x65F6;&#x4F1A;&#x628A;&#x672C;&#x5730;&#x4EE3;&#x7801;&#x8986;&#x76D6;&#x6389;</h2>
<pre><code class="lang-text">&#x4E00;&#x822C;&#x6211;&#x4EEC; git &#x66F4;&#x65B0;&#x4E0D;&#x4F1A;&#x8986;&#x76D6;&#x6389;&#x6211;&#x4EEC;&#x672C;&#x5730;&#x7684;&#x4EE3;&#x7801; ,&#x4F46;&#x662F;&#x6709;&#x65F6; androidstudio &#x51FA;bug &#xFF0C; git pull &#x540E;&#xFF0C;
&#x4F1A;&#x628A;&#x672C;&#x5730;&#x4EE3;&#x7801;&#x5220;&#x6389;&#x3002;&#x6B64;&#x65F6;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; Androidstudio &#x7684; localHistory &#x627E;&#x56DE;&#x4EE3;&#x7801;&#x3002;
</code></pre>
<h2 id="gitignore-&#x6587;&#x4EF6;"><a name="gitignore-&#x6587;&#x4EF6;" class="anchor-navigation-ex-anchor" href="#gitignore-&#x6587;&#x4EF6;"><i class="fa fa-link" aria-hidden="true"></i></a>3.10. gitignore &#x6587;&#x4EF6;</h2>
<pre><code class="lang-text">1&#x3001;&#x5982;&#x679C;&#x4E0D;&#x6E05;&#x695A;&#x6DFB;&#x52A0;&#x89C4;&#x5219;&#xFF0C;&#x53EF;&#x4EE5;&#x501F;&#x7528;&#x63D2;&#x4EF6; .gitignore &#x8FDB;&#x884C;&#x9F20;&#x6807;&#x6DFB;&#x52A0;

2&#x3001;&#x6709;&#x65F6;&#x4F1A;&#x9047;&#x5230;&#x4FEE;&#x6539;&#x4E86;&#x5FFD;&#x7565;&#x6587;&#x4EF6;&#x540E;&#xFF0C;&#x89C4;&#x5219;&#x5E76;&#x6CA1;&#x6709;&#x751F;&#x6548;&#x7684;&#x73B0;&#x8C61;&#x3002;
&#x539F;&#x56E0;&#x662F;.gitignore&#x53EA;&#x80FD;&#x5FFD;&#x7565;&#x90A3;&#x4E9B;&#x539F;&#x6765;&#x6CA1;&#x6709;&#x88AB;&#x8FFD;&#x8E2A;&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x5982;&#x679C;&#x67D0;&#x4E9B;&#x6587;&#x4EF6;&#x5DF2;&#x7ECF;&#x88AB;&#x7EB3;&#x5165;&#x4E86;&#x7248;&#x672C;&#x7BA1;&#x7406;&#x4E2D;&#xFF0C;
&#x5219;&#x4FEE;&#x6539;.gitignore&#x662F;&#x65E0;&#x6548;&#x7684;&#x3002;&#x90A3;&#x4E48;&#x89E3;&#x51B3;&#x65B9;&#x6CD5;&#x5C31;&#x662F;&#x5148;&#x628A;&#x672C;&#x5730;&#x7F13;&#x5B58;&#x5220;&#x9664;&#xFF08;&#x6539;&#x53D8;&#x6210;&#x672A;&#x88AB;&#x8FFD;&#x8E2A;&#x72B6;&#x6001;&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x63D0;&#x4EA4;&#x3002;
git rm -r --cached ./  (&#x6CE8;&#x610F;&#x90A3;&#x4E2A;&#x5C0F;&#x6570;&#x70B9;)
</code></pre>
<p><img src="../pics/ignore&#x63D2;&#x4EF6;.png" alt=""></p>
<h2 id="idea-&#x4E2D;-git-pull-&#x548C;-update-project-&#x7684;&#x533A;&#x522B;"><a name="idea-&#x4E2D;-git-pull-&#x548C;-update-project-&#x7684;&#x533A;&#x522B;" class="anchor-navigation-ex-anchor" href="#idea-&#x4E2D;-git-pull-&#x548C;-update-project-&#x7684;&#x533A;&#x522B;"><i class="fa fa-link" aria-hidden="true"></i></a>3.11. idea &#x4E2D; git pull &#x548C; update project &#x7684;&#x533A;&#x522B;</h2>
<pre><code class="lang-text">git pull &#x662F; git fetch + git merge FETCH_HEAD &#x7684;&#x7F29;&#x5199;&#x3002;
git pull &#x5C31;&#x662F;&#x5148; fetch &#xFF0C;&#x7136;&#x540E;&#x6267;&#x884C; merge &#x64CD;&#x4F5C;&#xFF0C;&#x5982;&#x679C;&#x52A0; &#x2014;rebase &#x53C2;&#x6570;&#xFF0C;&#x5C31;&#x662F;&#x4F7F;&#x7528; git rebase &#x4EE3;&#x66FF; git merge&#x3002;

Idea &#x7684; update project &#x5C31;&#x662F;&#x4F60;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x5230;&#x5E95;&#x662F; merge &#x8FD8;&#x662F; rebase &#x7684; git pull&#x3002; 
&#x662F; idea &#x5C01;&#x88C5;&#x7684;&#x4E00;&#x4E2A;&#x5DE5;&#x5177;&#x3002;
</code></pre>
<h2 id="git-fetch-&#x548C;-git-pull-&#x7684;&#x533A;&#x522B;"><a name="git-fetch-&#x548C;-git-pull-&#x7684;&#x533A;&#x522B;" class="anchor-navigation-ex-anchor" href="#git-fetch-&#x548C;-git-pull-&#x7684;&#x533A;&#x522B;"><i class="fa fa-link" aria-hidden="true"></i></a>3.12. git fetch &#x548C; git pull &#x7684;&#x533A;&#x522B;</h2>
<pre><code class="lang-text">git fetch &#xFF1A;&#x76F8;&#x5F53;&#x4E8E;&#x662F;&#x4ECE;&#x8FDC;&#x7A0B;&#x83B7;&#x53D6;&#x6700;&#x65B0;&#x7248;&#x672C;&#x5230;&#x672C;&#x5730;&#xFF0C;&#x4F46;&#x4E0D;&#x4F1A;&#x81EA;&#x52A8; merge
git pull &#xFF1A;&#x76F8;&#x5F53;&#x4E8E;&#x662F;&#x4ECE;&#x8FDC;&#x7A0B;&#x83B7;&#x53D6;&#x6700;&#x65B0;&#x7248;&#x672C;&#x5E76; merge &#x5230;&#x672C;&#x5730; &#x3002;
git fetch &#x66F4;&#x5B89;&#x5168;&#x4E00;&#x4E9B;&#xFF0C;&#x56E0;&#x4E3A;&#x5728; merge &#x524D;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x66F4;&#x65B0;&#x60C5;&#x51B5;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x51B3;&#x5B9A;&#x662F;&#x5426;&#x5408;&#x5E76;&#x3002;
</code></pre>
<h2 id="git-push-&#x547D;&#x4EE4;"><a name="git-push-&#x547D;&#x4EE4;" class="anchor-navigation-ex-anchor" href="#git-push-&#x547D;&#x4EE4;"><i class="fa fa-link" aria-hidden="true"></i></a>3.13. git push &#x547D;&#x4EE4;</h2>
<pre><code class="lang-text">git push &#x7528;&#x4E8E;&#x5C06;&#x672C;&#x5730;&#x7684;&#x5206;&#x652F;&#x7248;&#x672C;&#x4E0A;&#x4F20;&#x5230;&#x8FDC;&#x7A0B;&#x5E76;&#x5408;&#x5E76;&#x3002;
git push &lt;&#x8FDC;&#x7A0B;&#x4E3B;&#x673A;&#x540D;&gt; &lt;&#x672C;&#x5730;&#x5206;&#x652F;&#x540D;&gt;:&lt;&#x8FDC;&#x7A0B;&#x5206;&#x652F;&#x540D;&gt;    //&#x5B8C;&#x6574;&#x547D;&#x4EE4;
git push &lt;&#x8FDC;&#x7A0B;&#x4E3B;&#x673A;&#x540D;&gt; &lt;&#x672C;&#x5730;&#x5206;&#x652F;&#x540D;&gt;        // &#x5982;&#x679C;&#x672C;&#x5730;&#x5206;&#x652F;&#x540D;&#x4E0E;&#x8FDC;&#x7A0B;&#x5206;&#x652F;&#x540D;&#x76F8;&#x540C;&#xFF0C;&#x5219;&#x53EF;&#x4EE5;&#x7B80;&#x5199;
</code></pre>
<h2 id="merge-branch-master-of-xxxxx"><a name="merge-branch-master-of-xxxxx" class="anchor-navigation-ex-anchor" href="#merge-branch-master-of-xxxxx"><i class="fa fa-link" aria-hidden="true"></i></a>3.14. Merge branch &#x2018;master&#x2019; of XXXXX</h2>
<pre><code class="lang-text">&#x7ECF;&#x5E38;&#x53EF;&#x4EE5;&#x5728; git &#x7248;&#x672C;&#x63A7;&#x5236;&#x5DE5;&#x5177;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x63D0;&#x4EA4;&#x8BB0;&#x5F55;&#x4E2D;&#x770B;&#x5230; Merge branch &#x2018;master&#x2019; of XXXXX  &#x8FD9;&#x4E00;&#x6761;&#x8BB0;&#x5F55;&#xFF0C;
&#x8FD9;&#x4F7F;&#x6211;&#x4EEC;&#x7684;&#x63D0;&#x4EA4;&#x8BB0;&#x5F55;&#x770B;&#x8D77;&#x6765;&#x5F88;&#x51CC;&#x4E71;&#x3002;

&#x6211;&#x4EEC;&#x5408;&#x5E76;&#x7684;&#x65F6;&#x5019;&#x9009;&#x62E9; rebase &#x6A21;&#x5F0F; &#x800C;&#x4E0D;&#x662F; merge &#x6A21;&#x5F0F;&#x65E2;&#x53EF;&#x3002;
</code></pre>
<h2 id="git-rebase-&#x548C;-git-merge-&#x7684;&#x533A;&#x522B;"><a name="git-rebase-&#x548C;-git-merge-&#x7684;&#x533A;&#x522B;" class="anchor-navigation-ex-anchor" href="#git-rebase-&#x548C;-git-merge-&#x7684;&#x533A;&#x522B;"><i class="fa fa-link" aria-hidden="true"></i></a>3.15. git rebase &#x548C; git merge &#x7684;&#x533A;&#x522B;</h2>
<pre><code class="lang-text">git rebase &#x548C; git merge , &#x4ED6;&#x4EEC;&#x4E24;&#x79CD;&#x5408;&#x5E76;&#x6240;&#x4EA7;&#x751F;&#x7684;log&#x662F;&#x4E0D;&#x4E00;&#x6837;&#x3002;
rebase &#x6A21;&#x5F0F;&#x76F8;&#x5BF9;&#x7B80;&#x6D01;&#x5F88;&#x591A; &#xFF0C;merge &#x4F1A;&#x5982;&#x5B9E;&#x7B2C;&#x8BB0;&#x5F55;&#x6240;&#x6709;&#x63D0;&#x4EA4;&#xFF0C;&#x770B;&#x8D77;&#x6765;&#x4F1A;&#x663E;&#x5F97;&#x7E41;&#x6742;&#x3002;
&#x4E24;&#x8005;&#x6A21;&#x5F0F;&#x5404;&#x6709;&#x4F18;&#x52BF;&#xFF0C;&#x53EF;&#x80FD;&#x4E0D;&#x540C;&#x7684;&#x516C;&#x53F8;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x9009;&#x62E9;&#x3002;
</code></pre>
<h1 id="gitbook"><a name="gitbook" class="anchor-navigation-ex-anchor" href="#gitbook"><i class="fa fa-link" aria-hidden="true"></i></a>4. gitbook</h1>
<h2 id="windows-&#x5B89;&#x88C5;gitbook"><a name="windows-&#x5B89;&#x88C5;gitbook" class="anchor-navigation-ex-anchor" href="#windows-&#x5B89;&#x88C5;gitbook"><i class="fa fa-link" aria-hidden="true"></i></a>4.1. windows &#x5B89;&#x88C5;gitbook</h2>
<pre><code class="lang-text">&#x5B89;&#x88C5;gitbook&#x8FC7;&#x7A0B;&#x4E2D;&#x8BF7;&#x4F18;&#x5148;&#x8FDE;&#x63A5;VPN&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x8BF7;&#x8003;&#x8651;&#x66F4;&#x6362;&#x6DD8;&#x5B9D;&#x6E90;&#x7B49;&#x65B9;&#x5F0F;&#x3002;

npm uninstall -g gitbook  // &#x5378;&#x8F7D; gitbook
npm uninstall -g gitbook-cli
npm cache clean --force   //&#x6E05;&#x9664;npm&#x7F13;&#x5B58;
npm install gitbook -g  // &#x5B89;&#x88C5;gitbook
npm install -g gitbook-cli
gitbook -V  // &#x67E5;&#x770B;&#x7248;&#x672C;
gitbook ls  // &#x5217;&#x51FA;&#x672C;&#x5730;&#x6240;&#x6709;&#x7684;gitbook&#x7248;&#x672C;

//&#x6CE8;&#x610F;
&#x5B89;&#x88C5;&#x65B0;&#x7248;&#x672C;&#x7684; nodejs&#x540E;&#xFF0C;&#x518D;&#x53BB;&#x5B89;&#x88C5;gitbook &#x4F1A;&#x51FA;&#x73B0;&#x5F88;&#x591A;&#x95EE;&#x9898;&#xFF0C;&#x6BD4;&#x8F83;&#x6298;&#x817E;&#x3002;&#x6CA1;&#x6709;&#x5FC5;&#x8981;&#x53BB;&#x5B89;&#x88C5;&#x6700;&#x65B0;&#x7248;&#x672C;&#x7684; node
&#x6240;&#x4EE5;&#x4E3A;&#x4E86;&#x7701;&#x4E8B;&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5B89;&#x88C5; node-v10.15.0-x64.msi &#x5373;&#x53EF; &#x3002;https://nodejs.org/dist/
gitbook &#x7684;&#x5B89;&#x88C5;&#x6D41;&#x7A0B;&#x5C31;&#x662F;&#x4E24;&#x53E5;&#x547D;&#x4EE4;
npm install -g gitbook-cli  // &#x5148;&#x5B89;&#x88C5; cli
gitbook -V  // &#x8F93;&#x5165;&#x67E5;&#x770B;&#x7248;&#x672C;&#x7684;&#x547D;&#x4EE4;&#x540E;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x5B89;&#x88C5;&#xFF0C;&#x5C31;&#x4F1A;&#x53BB;&#x81EA;&#x52A8;&#x5B89;&#x88C5;&#xFF0C;&#x8010;&#x5FC3;&#x7B49;&#x5F85;&#x5373;&#x53EF;&#x3002;
</code></pre>
<h2 id="&#x5728;&#x56FD;&#x5185;&#x4E3A;&#x4E86;&#x52A0;&#x901F;&#x8BBF;&#x95EE;&#x901F;&#x5EA6;&#xFF0C;&#x4E00;&#x822C;&#x4F1A;&#x66F4;&#x6362;&#x6210;&#x6DD8;&#x5B9D;&#x7684;&#x4E0B;&#x8F7D;&#x6E90;"><a name="&#x5728;&#x56FD;&#x5185;&#x4E3A;&#x4E86;&#x52A0;&#x901F;&#x8BBF;&#x95EE;&#x901F;&#x5EA6;&#xFF0C;&#x4E00;&#x822C;&#x4F1A;&#x66F4;&#x6362;&#x6210;&#x6DD8;&#x5B9D;&#x7684;&#x4E0B;&#x8F7D;&#x6E90;" class="anchor-navigation-ex-anchor" href="#&#x5728;&#x56FD;&#x5185;&#x4E3A;&#x4E86;&#x52A0;&#x901F;&#x8BBF;&#x95EE;&#x901F;&#x5EA6;&#xFF0C;&#x4E00;&#x822C;&#x4F1A;&#x66F4;&#x6362;&#x6210;&#x6DD8;&#x5B9D;&#x7684;&#x4E0B;&#x8F7D;&#x6E90;"><i class="fa fa-link" aria-hidden="true"></i></a>4.2. &#x5728;&#x56FD;&#x5185;&#x4E3A;&#x4E86;&#x52A0;&#x901F;&#x8BBF;&#x95EE;&#x901F;&#x5EA6;&#xFF0C;&#x4E00;&#x822C;&#x4F1A;&#x66F4;&#x6362;&#x6210;&#x6DD8;&#x5B9D;&#x7684;&#x4E0B;&#x8F7D;&#x6E90;</h2>
<pre><code class="lang-text">// &#x8BBE;&#x7F6E; &#x6DD8;&#x5B9D;&#x955C;&#x50CF;&#x6E90;
npm config set registry https://registry.npm.taobao.org
npm config get registry  // &#x67E5;&#x770B; &#x4F7F;&#x7528;&#x7684; &#x955C;&#x50CF;&#x6E90;
npm install -g cnpm --registry=https://registry.npm.taobao.org
</code></pre>
<h2 id="gitbook&#x5E38;&#x7528;&#x7684;&#x4F7F;&#x7528;&#x547D;&#x4EE4;"><a name="gitbook&#x5E38;&#x7528;&#x7684;&#x4F7F;&#x7528;&#x547D;&#x4EE4;" class="anchor-navigation-ex-anchor" href="#gitbook&#x5E38;&#x7528;&#x7684;&#x4F7F;&#x7528;&#x547D;&#x4EE4;"><i class="fa fa-link" aria-hidden="true"></i></a>4.3. gitbook&#x5E38;&#x7528;&#x7684;&#x4F7F;&#x7528;&#x547D;&#x4EE4;</h2>
<pre><code class="lang-text">gitbook install // &#x5B89;&#x88C5;&#x4F9D;&#x8D56;&#x5305;
gitbook init //&#x65B0;&#x5EFA;&#x5B9A;&#x4E49;&#x597D;&#x7684;&#x6587;&#x4EF6;
gitbook serve // &#x672C;&#x5730;&#x670D;&#x52A1;&#x5668;&#x6D4B;&#x8BD5;
gitbook build // &#x7F16;&#x8BD1;&#x6210;html&#x683C;&#x5F0F;
</code></pre>
<h2 id="&#x5B89;&#x88C5;&#x9519;&#x8BEF;"><a name="&#x5B89;&#x88C5;&#x9519;&#x8BEF;" class="anchor-navigation-ex-anchor" href="#&#x5B89;&#x88C5;&#x9519;&#x8BEF;"><i class="fa fa-link" aria-hidden="true"></i></a>4.4. &#x5B89;&#x88C5;&#x9519;&#x8BEF;</h2>
<pre><code class="lang-text">&#x5982;&#x679C;&#x9047;&#x5230; &#x201C; Error: ENOENT: no such file or directory ... &#x201D; &#x8FD9;&#x4E2A;&#x9519;&#x8BEF; &#xFF0C;
&#x628A;.gitbook\versions\3.2.2\lib\output\website\copyPluginAssets.js
&#x4FEE;&#x6539;&#x6210;   confirm&#xFF1A;false 

&#x5982;&#x679C;&#x9047;&#x5230;  fs\polyfills.js:287 if (cb) cb.apply(this, arguments) ...
&#x6839;&#x636E;&#x62A5;&#x9519;&#x4FE1;&#x606F;&#xFF0C;&#x627E;&#x5230; polyfills.js &#xFF0C;&#x6CE8;&#x91CA; 62-64 &#x884C;&#x5373;&#x53EF; 
Node.js&#xFF1A;v14.15.4. 
CLI version: 2.3.2
GitBook version: 3.2.3
</code></pre>
<h2 id="gitbook-&#x70ED;&#x66F4;&#x65B0;-windows"><a name="gitbook-&#x70ED;&#x66F4;&#x65B0;-windows" class="anchor-navigation-ex-anchor" href="#gitbook-&#x70ED;&#x66F4;&#x65B0;-windows"><i class="fa fa-link" aria-hidden="true"></i></a>4.5. gitbook &#x70ED;&#x66F4;&#x65B0; (Windows)</h2>
<pre><code class="lang-text">https://github.com/GitbookIO/gitbook-cli/issues/67
&#x6682;&#x65F6;&#x6CA1;&#x627E;&#x5230;&#x4F18;&#x96C5;&#x7684;&#x529E;&#x6CD5;&#x3002;&#x7ED9;&#x51FA;&#x7C97;&#x66B4;&#x7684;&#x65B9;&#x6848;&#xFF0C;&#x68C0;&#x6D4B;&#x5230;&#x5954;&#x6E83;&#x540E;&#x53C8;&#x91CD;&#x542F;&#x3002;
&#x5C06;&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x505A;&#x6210;&#x4E00;&#x4E2A; xx.bat &#xFF0C;&#x901A;&#x8FC7;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x542F;&#x52A8;&#x5373;&#x53EF;&#x3002;
@echo off
:start
call gitbook serve
@goto start
</code></pre>
<h2 id="gitbook-&#x7559;&#x8A00;&#x8BC4;&#x8BBA;"><a name="gitbook-&#x7559;&#x8A00;&#x8BC4;&#x8BBA;" class="anchor-navigation-ex-anchor" href="#gitbook-&#x7559;&#x8A00;&#x8BC4;&#x8BBA;"><i class="fa fa-link" aria-hidden="true"></i></a>4.6. gitbook &#x7559;&#x8A00;&#x8BC4;&#x8BBA;</h2>
<pre><code class="lang-text">&#x4F7F;&#x7528; Valine &#x63D2;&#x4EF6;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0; (20210204)&#x3002;
Valine &#x662F;&#x4E00;&#x6B3E;&#x65E0;&#x540E;&#x7AEF;&#x8BC4;&#x8BBA;&#x7CFB;&#x7EDF;&#x3002;
https://valine.js.org/

Valine &#x662F;&#x57FA;&#x4E8E; leancloud &#x5B9E;&#x73B0;&#x7684;(Valine&#x7684;&#x8BC4;&#x8BBA;&#x6570;&#x636E;&#x4FDD;&#x5B58;&#x5728;&#x8FD9;&#x91CC;)    
&#x9700;&#x8981;&#x7533;&#x8BF7; leancloud &#x7684;&#x8D26;&#x53F7;&#xFF0C;&#x56E0;&#x4E3A;&#x56FD;&#x5185;&#x76D1;&#x7BA1;&#x95EE;&#x9898;&#xFF0C;
&#x5982;&#x679C;&#x4F60;&#x4E0D;&#x60F3;&#x5B9E;&#x540D;&#x8BA4;&#x8BC1;&#x548C;&#x57DF;&#x540D;&#x5907;&#x6848;&#xFF0C;&#x8BF7;&#x4F7F;&#x7528;&#x56FD;&#x9645;&#x7248; (20210204)&#x3002;&#x3002;
https://console.leancloud.app/apps
</code></pre>
<h1 id="&#x865A;&#x62DF;&#x673A;"><a name="&#x865A;&#x62DF;&#x673A;" class="anchor-navigation-ex-anchor" href="#&#x865A;&#x62DF;&#x673A;"><i class="fa fa-link" aria-hidden="true"></i></a>5. &#x865A;&#x62DF;&#x673A;</h1>
<pre><code class="lang-html">VMware Workstation 12&#x5E8F;&#x5217;&#x53F7;
5A02H-AU243-TZJ49-GTC7K-3C61N

//&#x5B89;&#x88C5;&#x5B8C;VmTools&#x91CD;&#x542F;&#x4E4B;&#x540E;&#x4ECD;&#x4E0D;&#x80FD;&#x5168;&#x5C4F;&#x663E;&#x793A;
&#x68C0;&#x67E5;VmTools&#x662F;&#x5426;&#x5B89;&#x88C5;&#x6210;&#x529F;: &#x5C06;&#x4E3B;&#x673A;&#x7684;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x62D6;&#x5230;&#x865A;&#x62DF;&#x673A;&#xFF0C;&#x5982;&#x679C;&#x53EF;&#x4EE5;&#x6258;&#x8FDB;&#x53BB;&#x8BF4;&#x660E;&#x5DF2;&#x7ECF;&#x5B89;&#x88C5;&#x6210;&#x529F;&#xFF0C;&#x5426;&#x5219;&#x6CA1;&#x6709;&#x3002;
&#x5982;&#x679C;&#x8FD8;&#x6CA1;&#x6709;&#x5168;&#x5C4F;&#x663E;&#x793A;&#xFF0C;&#x5C31;&#x8BBE;&#x7F6E;&#x6210;&quot;&#x81EA;&#x52A8;&#x9002;&#x5E94;&#x7A97;&#x53E3;&quot;&#x3002;
</code></pre>
<p><img src="../pics/vmware&#x5168;&#x5C4F;.png" alt=""></p>
<h1 id="windows-&#x7CFB;&#x7EDF;"><a name="windows-&#x7CFB;&#x7EDF;" class="anchor-navigation-ex-anchor" href="#windows-&#x7CFB;&#x7EDF;"><i class="fa fa-link" aria-hidden="true"></i></a>6. windows &#x7CFB;&#x7EDF;</h1>
<p>&#x5982;&#x679C;&#x7528;&#x7684;&#x662F;&#x6B63;&#x7248;&#x7684;win10&#x7CFB;&#x7EDF;&#xFF0C;&#x4F1A;&#x7ECF;&#x5E38;&#x63D0;&#x793A;&#x66F4;&#x65B0;&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x4F60;&#x4E0D;&#x60F3;&#x5F3A;&#x5236;&#x4F60;&#x66F4;&#x65B0;&#xFF0C;
&#x53EF;&#x4EE5; &#x4F7F;&#x7528; <a href="https://www.sordum.org/9470/windows-update-blocker-v1-6/" target="_blank">Windows Update Blocker</a>&#x5C06;&#x66F4;&#x65B0;&#x6A21;&#x5757;&#x7981;&#x6B62;&#x6389;&#x3002;</p>
<h2 id="&#x7535;&#x8111;&#x6D4F;&#x89C8;&#x5668;&#x6A21;&#x62DF;&#x624B;&#x673A;&#x6D4F;&#x89C8;&#x5668;"><a name="&#x7535;&#x8111;&#x6D4F;&#x89C8;&#x5668;&#x6A21;&#x62DF;&#x624B;&#x673A;&#x6D4F;&#x89C8;&#x5668;" class="anchor-navigation-ex-anchor" href="#&#x7535;&#x8111;&#x6D4F;&#x89C8;&#x5668;&#x6A21;&#x62DF;&#x624B;&#x673A;&#x6D4F;&#x89C8;&#x5668;"><i class="fa fa-link" aria-hidden="true"></i></a>6.1. &#x7535;&#x8111;&#x6D4F;&#x89C8;&#x5668;&#x6A21;&#x62DF;&#x624B;&#x673A;&#x6D4F;&#x89C8;&#x5668;</h2>
<p>pc&#x7AEF;&#x8C37;&#x6B4C;&#x6D4F;&#x89C8;&#x5668;&#x6A21;&#x62DF;&#x5FAE;&#x4FE1;&#x6D4F;&#x89C8;&#x5668;&#xFF0C;&#x7136;&#x540E;&#x5229;&#x7528;&#x97F3;&#x9891;&#x6293;&#x53D6;&#x63D2;&#x4EF6;&#x6293;&#x53D6;&#x97F3;&#x9891;&#x3002;
&#x56E0;&#x4E3A;&#x6709;&#x4E9B;&#x7F51;&#x9875;&#x505A;&#x4E86;&#x9650;&#x5236;&#x201C;&#x8BF7;&#x5728;&#x5FAE;&#x4FE1;&#x5BA2;&#x6237;&#x7AEF;&#x6253;&#x5F00;&#x94FE;&#x63A5;&#x201D; &#x3002;</p>
<pre><code class="lang-text">1&#x3001;&#x7535;&#x8111;&#x7AEF;&#x8C37;&#x6B4C;&#x6D4F;&#x89C8;&#x5668;&#x5B89;&#x88C5;&#x63D2;&#x4EF6; &quot; user agent switcher &quot;
2&#x3001;&#x5728;&#x63D2;&#x4EF6;&#x4E2D;&#x6A21;&#x62DF;&#x5FAE;&#x4FE1;&#x6D4F;&#x89C8;&#x5668;&#x7684; UA ( userAgent )
mozilla/5.0 (linux; android 5.1.1; mi note pro build/lmy47v) applewebkit/537.36 (khtml, like gecko) version/4.0 chrome/37.0.0.0 mobile mqqbrowser/6.2 tbs/036215 safari/537.36 micromessage/6.3.16.49_r03ae324.780 nettype/wifi language/zh_cn
3&#x3001;&#x7136;&#x540E;&#x6D4F;&#x89C8;&#x5668;&#x5B89;&#x88C5;&#x63D2;&#x4EF6;&#x201C;&#x732B;&#x6293;&#x201D;&#xFF0C;&#x8FDB;&#x884C;&#x89C6;&#x5C4F;&#x6293;&#x53D6;&#x3002;
</code></pre>
<h2 id="win10-&#x53CC;&#x5C4F;&#x663E;&#x793A;"><a name="win10-&#x53CC;&#x5C4F;&#x663E;&#x793A;" class="anchor-navigation-ex-anchor" href="#win10-&#x53CC;&#x5C4F;&#x663E;&#x793A;"><i class="fa fa-link" aria-hidden="true"></i></a>6.2. win10 &#x53CC;&#x5C4F;&#x663E;&#x793A;</h2>
<pre><code class="lang-text">&#x6309; Windows &#x5FBD;&#x6807;&#x952E;  + P 
&#x7136;&#x540E;&#x5728;&#x5F39;&#x51FA;&#x7684;&#x9009;&#x9879;&#x4E2D;&#x9009;&#x62E9; &#x62D3;&#x5C55;&#x3002;
</code></pre>
<h2 id="win10-iso-&#x955C;&#x50CF;"><a name="win10-iso-&#x955C;&#x50CF;" class="anchor-navigation-ex-anchor" href="#win10-iso-&#x955C;&#x50CF;"><i class="fa fa-link" aria-hidden="true"></i></a>6.3. win10 iso &#x955C;&#x50CF;</h2>
<pre><code class="lang-text">https://windows10.pro/microsoft-com-software-download-windows10-iso/
&#x6216;&#x8005;&#x5728;&#x6211;&#x963F;&#x91CC;&#x4E91;&#x76D8;&#x91CC;&#x6709;&#x4FDD;&#x5B58;&#x3002;
win10_21h1_china_ggk_chinese(simplified)_x64.iso
</code></pre>
<h1 id="ps"><a name="ps" class="anchor-navigation-ex-anchor" href="#ps"><i class="fa fa-link" aria-hidden="true"></i></a>7. ps</h1>
<h2 id="&#x5E38;&#x7528;&#x5FEB;&#x6377;&#x952E;&#xFF1A;"><a name="&#x5E38;&#x7528;&#x5FEB;&#x6377;&#x952E;&#xFF1A;" class="anchor-navigation-ex-anchor" href="#&#x5E38;&#x7528;&#x5FEB;&#x6377;&#x952E;&#xFF1A;"><i class="fa fa-link" aria-hidden="true"></i></a>7.1. &#x5E38;&#x7528;&#x5FEB;&#x6377;&#x952E;&#xFF1A;</h2>
<pre><code class="lang-text">&#x79FB;&#x52A8;&#x5DE5;&#x5177;  V
&#x88C1;&#x526A;&#x5DE5;&#x5177;  C
shift+ctrl+alt+s &#x4FDD;&#x5B58;&#x5207;&#x7247;
&#x653E;&#x5927;&#x89C6;&#x56FE; Ctrl+&#x3010;+&#x3011;
&#x7F29;&#x5C0F;&#x89C6;&#x56FE; &#x3010;Ctrl&#x3011;+&#x3010;-&#x3011;
&#x5207;&#x56FE;&#xFF1A; ctrl + alt + shift + a
</code></pre>
<h2 id="&#x5236;&#x4F5C;&#x5706;&#x89D2;&#x77E9;&#x5F62;&#x56FE;&#x7247;"><a name="&#x5236;&#x4F5C;&#x5706;&#x89D2;&#x77E9;&#x5F62;&#x56FE;&#x7247;" class="anchor-navigation-ex-anchor" href="#&#x5236;&#x4F5C;&#x5706;&#x89D2;&#x77E9;&#x5F62;&#x56FE;&#x7247;"><i class="fa fa-link" aria-hidden="true"></i></a>7.2. &#x5236;&#x4F5C;&#x5706;&#x89D2;&#x77E9;&#x5F62;&#x56FE;&#x7247;</h2>
<p><a href="http://jingyan.baidu.com/article/1974b289b4a5e8f4b1f774a7.html" target="_blank">&#x53C2;&#x8003;&#x8D44;&#x6599;</a></p>
<h2 id="&#x56FE;&#x7247;&#x6E10;&#x53D8;&#x3001;&#x900F;&#x660E;&#x5EA6;&#x6E10;&#x53D8;"><a name="&#x56FE;&#x7247;&#x6E10;&#x53D8;&#x3001;&#x900F;&#x660E;&#x5EA6;&#x6E10;&#x53D8;" class="anchor-navigation-ex-anchor" href="#&#x56FE;&#x7247;&#x6E10;&#x53D8;&#x3001;&#x900F;&#x660E;&#x5EA6;&#x6E10;&#x53D8;"><i class="fa fa-link" aria-hidden="true"></i></a>7.3. &#x56FE;&#x7247;&#x6E10;&#x53D8;&#x3001;&#x900F;&#x660E;&#x5EA6;&#x6E10;&#x53D8;</h2>
<p><a href="http://jingyan.baidu.com/article/bea41d43769fa2b4c51be69f.html" target="_blank">&#x53C2;&#x8003;&#x8D44;&#x6599;</a></p>
<h2 id="ps&#x91CC;&#x600E;&#x4E48;&#x6837;&#x5C06;&#x767D;&#x8272;&#x80CC;&#x666F;&#x53BB;&#x6389;&#xFF0C;&#x53D8;&#x6210;&#x900F;&#x660E;&#x7684;&#x80CC;&#x666F;&#xFF1F;"><a name="ps&#x91CC;&#x600E;&#x4E48;&#x6837;&#x5C06;&#x767D;&#x8272;&#x80CC;&#x666F;&#x53BB;&#x6389;&#xFF0C;&#x53D8;&#x6210;&#x900F;&#x660E;&#x7684;&#x80CC;&#x666F;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#ps&#x91CC;&#x600E;&#x4E48;&#x6837;&#x5C06;&#x767D;&#x8272;&#x80CC;&#x666F;&#x53BB;&#x6389;&#xFF0C;&#x53D8;&#x6210;&#x900F;&#x660E;&#x7684;&#x80CC;&#x666F;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>7.4. PS&#x91CC;&#x600E;&#x4E48;&#x6837;&#x5C06;&#x767D;&#x8272;&#x80CC;&#x666F;&#x53BB;&#x6389;&#xFF0C;&#x53D8;&#x6210;&#x900F;&#x660E;&#x7684;&#x80CC;&#x666F;&#xFF1F;</h2>
<p><a href="https://zhidao.baidu.com/question/117581064.html" target="_blank">&#x53C2;&#x8003;&#x8D44;&#x6599;</a></p>
<pre><code class="lang-text">&#x8981;&#x5148;&#x89E3;&#x538B;&#x56FE;&#x5C42;&#x9501;&#x5B9A;
&#x6253;&#x5F00;&#x56FE;&#x7247;&#xFF0C;&#x5355;&#x7EAF;&#x767D;&#x8272;&#x80CC;&#x666F;&#x7684;&#x8BDD;&#x5219;&#x53EA;&#x9700;&#x4F7F;&#x7528;&#x5DE5;&#x5177;&#x680F;&#x4E2D;&#x7684;&#x9B54;&#x68D2;&#x5DE5;&#x5177;&#x5728;&#x767D;&#x8272;&#x90E8;&#x4F4D;&#x70B9;&#x4E00;&#x4E0B;&#xFF0C;&#x8DDF;&#x7740;delete&#x952E;&#x5220;&#x9664;&#xFF0C;&#x6B64;&#x65F6;&#x5C31;&#x662F;&#x900F;&#x660E;&#x7684;&#x80CC;&#x666F;&#x56FE;&#x7247;&#x4E86;&#xFF0C;&#x4F46;&#x5173;&#x952E;&#x7684;&#x662F;&#x8981;&#x9009;&#x62E9;&#x5408;&#x9002;&#x7684;&#x4FDD;&#x5B58;&#x65B9;&#x5F0F;&#x3002;&#x70B9;&#x6587;&#x4EF6;-&#x5B58;&#x50A8;&#x4E3A;web&#x548C;&#x8BBE;&#x5907;&#x6240;&#x7528;&#x683C;&#x5F0F;&#xFF0C;&#x5728;&#x5F39;&#x7A97;&#x9009;&#x62E9;&#x9644;&#x56FE;&#x7EA2;&#x6846;&#x5904;&#x7684;PNG&#x683C;&#x5F0F;&#x5C31;&#x53EF;&#x4EE5;&#x4E86;&#x3002;
&#x65B9;&#x6CD5;&#x4E00;:&#x7528;&#x64E6;&#x9664;&#x5DE5;&#x5177;&#x7EC4;&#x4E2D;&#x7684;&#x9B54;&#x68D2;&#x64E6;&#x9664;,&#x70B9;&#x9009;&#x767D;&#x8272;
&#x65B9;&#x6CD5;&#x4E8C;:
1&#x3001;&#x7528;&#x9009;&#x62E9;&#x5DE5;&#x5177;&#x4E2D;&#x7684;&#x9B54;&#x68D2;&#x5DE5;&#x5177;&#x9009;&#x767D;&#x8272;(&#x52FE;&#x9009;&#x8FDE;&#x7EED;&#x7684;).
2&#x3001;&#x7136;&#x540E;&#x53CD;&#x9009;,&#x590D;&#x5236;
3&#x3001;&#x518D;&#x7C98;&#x8D34;&#x6210;&#x65B0;&#x5C42;
4&#x3001;&#x518C;&#x6389;&#x80CC;&#x666F;&#x5C42;
5&#x3001;&#x5B8C;
</code></pre>
<h1 id="xutils"><a name="xutils" class="anchor-navigation-ex-anchor" href="#xutils"><i class="fa fa-link" aria-hidden="true"></i></a>8. xUtils</h1>
<pre><code class="lang-text">https://github.com/wyouflf/xUtils3
compile &apos;org.xutils:xutils:3.5.0&apos;

// 1&#x3001;&#x5728;Application &#x521D;&#x59CB;&#x5316;
// import org.xutils.x;
x.Ext.init(this);
x.Ext.setDebug(false);

// get&#x8BF7;&#x6C42;
private void loadData( ) {
    String API = Ipconfig.KEY_WORKNEWS_DetailItem;
    API = API.replace(&quot;{pageSize}&quot; ,&quot;10&quot;) ;
    RequestParams params = new RequestParams(API);
    Callback.Cancelable cancelable = x.http().get(params,
            new Callback.CommonCallback&lt;String&gt;() {
                @Override
                public void onSuccess(String result) { }

                @Override
                public void onError(Throwable ex, boolean isOnCallback) {   }

                @Override
                public void onCancelled(CancelledException cex) {   }

                @Override
                public void onFinished() {   }
            });
}

// post &#x8BF7;&#x6C42;
private void requestHost(String name, String pwd1 ) {
    String API = Ipconfig.KEY_userRegister;
    RequestParams params = new RequestParams(API);
    params.addBodyParameter(&quot;userName&quot;,name);
    params.addParameter(&quot;password&quot;,pwd1);
    x.http().post(params, new Callback.CommonCallback&lt;String&gt;() {
        public void onSuccess(String result) {   }
    });


 // &#x6587;&#x4EF6;&#x4E0A;&#x4F20;
String api =&quot;http://xxx&quot; ;
RequestParams params = new RequestParams(api) ;
params.setMultipart(true);
params.addBodyParameter(&quot;userId&quot;, MyApplication.getUserId(activity));
params.addBodyParameter(&quot;file&quot;, new File( filePath));
Callback.Cancelable cancelable
        = x.http().post(params,
        new Callback.CommonCallback&lt;String&gt;() {
            @Override
            public void onSuccess(String result) {   }
        });
// &#x6587;&#x4EF6;&#x4E0B;&#x8F7D;
RequestParams requestParams = new RequestParams();
requestParams.setSaveFilePath(filePath);
requestParams.setUri(url);// &#x6587;&#x4EF6;url
x.http().get( requestParams, new Callback.ProgressCallback&lt;File&gt;() {
    @Override
    public void onSuccess(File result) {   }
    @Override
    public void onLoading(long total, long current, boolean isDownloading) {
        float percent = 100f* current /  total  ;
    }
</code></pre>
<h1 id="butterknife"><a name="butterknife" class="anchor-navigation-ex-anchor" href="#butterknife"><i class="fa fa-link" aria-hidden="true"></i></a>9. butterknife</h1>
<pre><code class="lang-text">butterknife &#x5E38;&#x7528;&#x7684;&#x529F;&#x80FD;&#x5C31;&#x662F; findview &#x7ED1;&#x5B9A; &#x548C; click &#x7ED1;&#x5B9A;&#x3002;
https://github.com/JakeWharton/butterknife
</code></pre>
<h2 id="butterknife-&#x6DFB;&#x52A0;&#x4F9D;&#x8D56;"><a name="butterknife-&#x6DFB;&#x52A0;&#x4F9D;&#x8D56;" class="anchor-navigation-ex-anchor" href="#butterknife-&#x6DFB;&#x52A0;&#x4F9D;&#x8D56;"><i class="fa fa-link" aria-hidden="true"></i></a>9.1. butterknife &#x6DFB;&#x52A0;&#x4F9D;&#x8D56;</h2>
<pre><code class="lang-text">Butterknife requires Java 8,
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

dependencies {
// &#x5728; &#x57FA;&#x7840;&#x5E93;&#x4E2D;&#x6DFB;&#x52A0;
  implementation &apos;com.jakewharton:butterknife:10.2.3&apos;
}

dependencies {
// &#x5728;&#x9879;&#x76EE;&#x6839;&#x76EE;&#x5F55;&#x7684; build.gradle &#x4E2D;&#x6DFB;&#x52A0;&#x63D2;&#x4EF6;&#x4F9D;&#x8D56;
    classpath &apos;com.jakewharton:butterknife-gradle-plugin:10.2.3&apos;
  }

// &#x5728;&#x9700;&#x8981;&#x4F7F;&#x7528;&#x7684; module &#x4E2D;&#x6DFB;&#x52A0;
apply plugin: &apos;com.jakewharton.butterknife&apos;  
// &#x54EA;&#x4E2A; module &#x4F7F;&#x7528;&#xFF0C;&#x5C31;&#x5728;&#x54EA;&#x4E2A; module &#x4E2D;&#x6DFB;&#x52A0;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x6DFB;&#x52A0;&#x5728;&#x5728;&#x57FA;&#x7840;module&#x4E2D;&#xFF0C;&#x5426;&#x5219;&#x6CE8;&#x89E3;&#x662F;&#x65E0;&#x6548;&#x7684;&#x3002;
annotationProcessor &apos;com.jakewharton:butterknife-compiler:10.2.3&apos;
</code></pre>
<h2 id="butterknife-&#x4F7F;&#x7528;&#x793A;&#x8303;"><a name="butterknife-&#x4F7F;&#x7528;&#x793A;&#x8303;" class="anchor-navigation-ex-anchor" href="#butterknife-&#x4F7F;&#x7528;&#x793A;&#x8303;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2. butterknife &#x4F7F;&#x7528;&#x793A;&#x8303;</h2>
<pre><code class="lang-text">@BindView(R2.id.wkExpandOhterFunc)
public WkExpandLayout wkExpandLayout ;

setContentView(R.layout.lib_login_activity_login);
ButterKnife.bind(this);

@OnClick({R2.id.changeStateBtn })
public  void onViewClicked(View view){
    int id = view.getId();
    if (id == R.id.changeStateBtn) {
         // todo 
    }
}
</code></pre>
<h1 id="eventbus&#x3001;"><a name="eventbus&#x3001;" class="anchor-navigation-ex-anchor" href="#eventbus&#x3001;"><i class="fa fa-link" aria-hidden="true"></i></a>10. EventBus&#x3001;</h1>
<pre><code class="lang-text">&#x7F3A;&#x70B9;&#xFF1A; &#x4E0D;&#x5BB9;&#x6613;&#x8DDF;&#x8E2A;&#x8C03;&#x8BD5;&#x4EE3;&#x7801;&#x3002;&#x903B;&#x8F91;&#x4E0D;&#x662F;&#x5F88;&#x8FDE;&#x8D2F;&#x3002;
https://github.com/greenrobot/EventBus
compile &apos;org.greenrobot:eventbus:3.1.1&apos;
// &#x7ED1;&#x5B9A;
@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

// &#x89E3;&#x7ED1;
@Override
public void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

// &#x53D1;&#x9001;
EventBus.getDefault().post(new MessageEvent());

// &#x63A5;&#x6536;
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventBusMsgCome(WkEventBean bean) {
   switch (bean.getCode()){
       case WkEventBean.CODE_1:
           String msg = (String) bean.getData() ;
           WkLog.d(&quot;UI received =   &quot;+msg);
           break;
       default:
           break;
   }

public class WkEventBean {
public static  final int CODE_1 = 1;
public static  final int CODE_2 = 2;
public WkEventBean(int code , Object data){
   this.code = code ;
   this.data =data ;
}

private int code ;
private Object data ;

public int getCode() {
   return code;
}
}
</code></pre>
<h1 id="rxjava-2x"><a name="rxjava-2x" class="anchor-navigation-ex-anchor" href="#rxjava-2x"><i class="fa fa-link" aria-hidden="true"></i></a>11. RxJava 2.x</h1>
<p>&#x8981;&#x5728;Android&#x4E2D;&#x4F7F;&#x7528;RxJava2,  &#x9700;&#x8981;&#x4F9D;&#x8D56; <a href="https://github.com/ReactiveX/RxJava" target="_blank">Rxjava2.x</a> &#x3001; <a href="https://github.com/ReactiveX/RxAndroid" target="_blank">RxAndroid</a></p>
<pre><code class="lang-text">&#x5F02;&#x6B65;&#x4E8B;&#x4EF6;&#x5904;&#x7406;&#x6846;&#x67B6;&#x3002;
continued support for Java 6+ &amp; Android 2.3+
&#x57FA;&#x4E8E;&#x89C2;&#x5BDF;&#x8005;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x3002;

RxJava1.x &#x8DDF; RxJava2.x &#x4E0D;&#x80FD;&#x5171;&#x5B58; &#xFF0C;&#x4F1A;&#x51B2;&#x7A81;&#x3002;
</code></pre>
<h2 id="rxjava&#x7EC4;&#x6210;&#x5143;&#x7D20;"><a name="rxjava&#x7EC4;&#x6210;&#x5143;&#x7D20;" class="anchor-navigation-ex-anchor" href="#rxjava&#x7EC4;&#x6210;&#x5143;&#x7D20;"><i class="fa fa-link" aria-hidden="true"></i></a>11.1. RxJava&#x7EC4;&#x6210;&#x5143;&#x7D20;</h2>
<table>
<thead>
<tr>
<th>RxJava&#x57FA;&#x672C;&#x7EC4;&#x6210;&#x5143;&#x7D20;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x88AB;&#x89C2;&#x5BDF;&#x8005;</td>
<td>&#x6570;&#x636E;&#x6E90;  &#x53D1;&#x9001;&#x6570;&#x636E;</td>
</tr>
<tr>
<td>&#x89C2;&#x5BDF;&#x8005;</td>
<td>&#x63A5;&#x6536;&#x5230;&#xFF08;&#x5904;&#x7406;&#x540E;&#x7684;&#x6570;&#x636E;&#xFF09;</td>
</tr>
<tr>
<td>&#x5EFA;&#x7ACB;&#x8BA2;&#x9605;&#x5173;&#x7CFB;</td>
<td></td>
</tr>
<tr>
<td>&#x64CD;&#x4F5C;&#x7B26;</td>
<td>&#x53EF;&#x4EE5;&#x5BF9;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x8FC7;&#x6EE4;&#x3001;&#x8F6C;&#x6362;&#x7B49;&#x5904;&#x7406;</td>
</tr>
<tr>
<td>&#x7EBF;&#x7A0B;&#x5207;&#x6362;</td>
<td>&#x6307;&#x5B9A;&#x53D1;&#x9001;&#x548C;&#x63A5;&#x6536;&#x7684;&#x7EBF;&#x7A0B;</td>
</tr>
</tbody>
</table>
<h2 id="rxjava-&#x5E38;&#x7528;&#x7C7B;"><a name="rxjava-&#x5E38;&#x7528;&#x7C7B;" class="anchor-navigation-ex-anchor" href="#rxjava-&#x5E38;&#x7528;&#x7C7B;"><i class="fa fa-link" aria-hidden="true"></i></a>11.2. RxJava &#x5E38;&#x7528;&#x7C7B;</h2>
<table>
<thead>
<tr>
<th>&#x5E38;&#x7528;&#x7C7B;</th>
<th>&#x4F5C;&#x7528;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Observable</td>
<td>&#x88AB;&#x89C2;&#x5BDF;&#x8005; <br></td>
</tr>
<tr>
<td>ObservableEmitter</td>
<td>&#x7528;&#x6765;&#x53D1;&#x51FA;&#x4E8B;&#x4EF6;&#x7684;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x53D1;&#x51FA;&#x4E09;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x4E8B;&#x4EF6;  <br> x.onNext() <br> x.onComplete() <br> x.onError() <br> &#x53D1;&#x5C04;&#x89C4;&#x5219;&#x5982;&#x4E0B;&#xFF1A; <br>  1&#x3001;&#x4E0A;&#x6E38;&#x53EF;&#x4EE5;&#x53D1;&#x9001;&#x65E0;&#x9650;&#x4E2A;onNext &#xFF0C;&#x4E0B;&#x6E38;&#x4E5F;&#x53EF;&#x4EE5;&#x63A5;&#x6536;&#x65E0;&#x9650;&#x4E2A;onNext   <br><br> 2&#x3001;&#x5F53;&#x4E0A;&#x6E38;&#x53D1;&#x9001;&#x4E86;&#x4E00;&#x4E2A;onComplete&#x540E;&#xFF08;&#x53EA;&#x80FD;&#x53D1;&#x4E00;&#x6B21;&#xFF09;, &#x4E0A;&#x6E38;onComplete&#x4E4B;&#x540E;&#x7684;&#x4E8B;&#x4EF6;&#x5C06;&#x4F1A;&#x7EE7;&#x7EED;&#x53D1;&#x9001;, &#x800C;&#x4E0B;&#x6E38;&#x6536;&#x5230;onComplete&#x4E8B;&#x4EF6;&#x4E4B;&#x540E;&#x5C06;&#x4E0D;&#x518D;&#x7EE7;&#x7EED;&#x63A5;&#x6536;&#x4E8B;&#x4EF6;  <br><br> 3&#x3001;&#x5F53;&#x4E0A;&#x6E38;&#x53D1;&#x9001;&#x4E86;&#x4E00;&#x4E2A;onError&#x540E;&#xFF08;&#x53EA;&#x80FD;&#x53D1;&#x4E00;&#x6B21;&#xFF09;, &#x4E0A;&#x6E38;onError&#x4E4B;&#x540E;&#x7684;&#x4E8B;&#x4EF6;&#x5C06;&#x7EE7;&#x7EED;&#x53D1;&#x9001;, &#x800C;&#x4E0B;&#x6E38;&#x6536;&#x5230;onError&#x4E8B;&#x4EF6;&#x4E4B;&#x540E;&#x5C06;&#x4E0D;&#x518D;&#x7EE7;&#x7EED;&#x63A5;&#x6536;&#x4E8B;&#x4EF6;  <br><br> 4&#x3001;&#x4E0A;&#x6E38;&#x53EF;&#x4EE5;&#x4E0D;&#x53D1;&#x9001;onComplete&#x6216;onError.  <br><br> 5&#x3001;onComplete &#x548C; onError &#x53EA;&#x80FD;&#x53D1;&#x9001;&#x4E00;&#x4E2A; , &#x4E0D;&#x80FD;&#x90FD;&#x53D1;&#x9001;</td>
</tr>
<tr>
<td>ObservableOnSubscribe</td>
<td></td>
</tr>
<tr>
<td>Observer</td>
<td>&#x89C2;&#x5BDF;&#x8005;</td>
</tr>
<tr>
<td>Disposable</td>
<td>x.dispose() &#x5207;&#x65AD;&#x8BA2;&#x9605;&#x5173;&#x7CFB;&#x3002; <br>  &#x8C03;&#x7528;dispose()&#x540E; &#xFF0C;&#x89C2;&#x5BDF;&#x8005;&#x63A5;&#x6536;&#x4E0D;&#x5230;&#x6570;&#x636E;&#xFF0C;&#x4F46;&#x662F;&#x6570;&#x636E;&#x6E90;&#x8FD8;&#x53EF;&#x4EE5;&#x7EE7;&#x7EED;&#x53D1;&#x9001;</td>
</tr>
<tr>
<td>CompositeDisposable</td>
<td>Disposable &#x5BB9;&#x5668; <br> x.add(...)  <br> x.clear()</td>
</tr>
<tr>
<td>Flowable</td>
<td>Rxjava2 &#x65B0;&#x589E;&#x7684; &#x3002;&#x6570;&#x636E;&#x53D1;&#x9001; &#x3002;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x7528;Flowable + Subscriber &#x6765;&#x89E3;&#x51B3; &#x6536;&#x53D1;&#x901F;&#x5EA6;&#x4E0D;&#x4E00;&#x81F4;&#x95EE;&#x9898;</td>
</tr>
<tr>
<td>Subscriber</td>
<td>&#x4E0E;Flowable&#x642D;&#x914D;&#xFF0C; &#x6570;&#x636E;&#x63A5;&#x6536;&#x3002;</td>
</tr>
<tr>
<td>Subscription</td>
<td>&#x5207;&#x65AD;&#x8BA2;&#x9605;&#x5173;&#x7CFB; <br> Subscription.cancel()  <br>  &#x89C2;&#x5BDF;&#x8005;&#x8BF7;&#x6C42;&#x6570;&#x636E;&#x6E90;&#x53D1;&#x9001;&#x591A;&#x5C11;&#x4E2A;&#x6570;&#x636E; <br> subscription.request(Long.MAX_VALUE)</td>
</tr>
<tr>
<td>FlowableEmitter</td>
<td>&#x8FD4;&#x56DE; &#x89C2;&#x5BDF;&#x8005; &#x80FD;&#x5904;&#x7406;&#x591A;&#x5C11;&#x4E2A;&#x6570;&#x636E; <br>flowableEmitter.requested()</td>
</tr>
<tr>
<td>Action</td>
<td></td>
</tr>
<tr>
<td>BiConsumer</td>
<td></td>
</tr>
<tr>
<td>BiFunction</td>
<td></td>
</tr>
<tr>
<td>Predicate</td>
<td></td>
</tr>
<tr>
<td>BiPredicate</td>
<td></td>
</tr>
<tr>
<td>BooleanSupplier</td>
<td></td>
</tr>
<tr>
<td>Cancellable</td>
<td></td>
</tr>
<tr>
<td>Consumer</td>
<td></td>
</tr>
<tr>
<td>Function</td>
<td></td>
</tr>
<tr>
<td>Function3</td>
<td></td>
</tr>
<tr>
<td>Function4</td>
<td></td>
</tr>
<tr>
<td>Function5</td>
<td></td>
</tr>
<tr>
<td>Function6</td>
<td></td>
</tr>
<tr>
<td>Function7</td>
<td></td>
</tr>
<tr>
<td>Function8</td>
<td></td>
</tr>
<tr>
<td>Function9</td>
<td></td>
</tr>
<tr>
<td>IntFunction</td>
<td></td>
</tr>
<tr>
<td>LongConsumer</td>
<td></td>
</tr>
<tr>
<td>Schedulers</td>
<td>&#x8C03;&#x5EA6;&#x5668;&#x3002; <br>  &#x5F53;&#x6570;&#x636E;&#x6E90;&#x548C;&#x89C2;&#x5BDF;&#x8005;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x65F6;&#xFF0C;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x540C;&#x6B65;&#x7684;&#x8BA2;&#x9605;&#x5173;&#x7CFB; &#x3002; <br>  &#x6570;&#x636E;&#x6E90;&#x6BCF;&#x53D1;&#x9001;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x540E;&#x5FC5;&#x987B;&#x7B49;&#x5230;&#x89C2;&#x5BDF;&#x8005;&#x63A5;&#x6536;&#x5904;&#x7406;&#x5B8C;&#x4E86;&#x4EE5;&#x540E;&#x624D;&#x80FD;&#x63A5;&#x7740;&#x53D1;&#x9001;&#x4E0B;&#x4E00;&#x4E2A;&#x3002;  <br>  &#x5F53;&#x5904;&#x4E8E;&#x4E0D;&#x540C;&#x7EBF;&#x7A0B;&#x65F6; ,&#x5C31;&#x662F;&#x5F02;&#x6B65;&#x7684;&#x8BA2;&#x9605;&#x5173;&#x7CFB;, &#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x6570;&#x636E;&#x6E90;&#x53EF;&#x4EE5;&#x81EA;&#x7531;&#x53D1;&#x9001;&#x6570;&#x636E;&#x3002;  <br>//CPU&#x8BA1;&#x7B97;&#x5BC6;&#x96C6;&#x578B;&#x7EBF;&#x7A0B; &#x9ED8;&#x8BA4;&#x7EBF;&#x7A0B;&#x6570;&#x7B49;&#x4E8E;&#x5904;&#x7406;&#x5668;&#x7684;&#x6570;&#x91CF;  <br>  Schedulers.computation()   <br>  // &#x4F7F;&#x7528;&#x6307;&#x5B9A;&#x7684;Executor&#x4F5C;&#x4E3A;&#x8C03;&#x5EA6;&#x5668; <br>  Schedulers.from()  <br>  // io&#x64CD;&#x4F5C;&#x7684;&#x7EBF;&#x7A0B; <br>  Schedulers.io()  <br>  // &#x5E38;&#x89C4;&#x65B0;&#x7EBF;&#x7A0B; <br>  Schedulers.newThread()  <br>  // Android&#x4E3B;&#x7EBF;&#x7A0B; <br>  AndroidSchedulers.mainThread()  <br>  // &#x5728;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x6267;&#x884C; &#xFF0C;&#x4E0D;&#x8FC7;&#x9700;&#x8981;&#x7B49;&#x961F;&#x5217;&#x4E2D;&#x7684;&#x5176;&#x4ED6;&#x4EFB;&#x52A1;&#x5B8C;&#x6210;&#x540E;&#x624D;&#x6267;&#x884C; <br>  Schedulers.trampoline()  <br>  </td>
</tr>
<tr>
<td>BackpressureStrategy</td>
<td>&#x80CC;&#x538B;&#x7B56;&#x7565; &#x6297;&#x538B;&#x529B;&#x7B56;&#x7565;  <br>   &#x80CC;&#x538B;&#x662F;&#x6307;&#x5728;&#x5F02;&#x6B65;&#x573A;&#x666F;&#x4E2D;&#xFF0C;&#x6570;&#x636E;&#x6E90;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;&#x901F;&#x5EA6;&#x8FDC;&#x5FEB;&#x4E8E;&#x89C2;&#x5BDF;&#x8005;&#x7684;&#x5904;&#x7406;&#x901F;&#x5EA6;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C; <br> &#x4E00;&#x79CD;&#x544A;&#x8BC9; &#x6570;&#x636E;&#x6E90; &#x9700;&#x8981;&#x964D;&#x4F4E;&#x53D1;&#x9001;&#x901F;&#x5EA6;&#x7684;&#x7B56;&#x7565; &#x3002;  <br>    // &#x7F13;&#x5B58;&#x533A;&#x5927;&#x5C0F;128&#xFF0C;&#x8D85;&#x8FC7;&#x5927;&#x5C0F;&#x7EE7;&#x7EED;&#x53D1;&#x5C31;&#x4F1A;&#x62A5;&#x9519; <br>      BackpressureStrategy.ERROR   <br>   // &#x9ED8;&#x8BA4;128&#xFF0C;&#x8D85;&#x8FC7;&#x5927;&#x5C0F;&#x7EE7;&#x7EED;&#x53D1;&#x5C31;&#x4F1A; &#x63D0;&#x793A;&#x7F13;&#x51B2;&#x6EE1;&#x4E86; <br>   BackpressureStrategy.MISSING   <br>   // &#x9ED8;&#x8BA4;&#x5927;&#x5C0F;128 &#xFF0C;&#x5927;&#x4E8E;128&#x65F6;&#x5C31;&#x4F1A;&#x4FEE;&#x6539;&#x4E3A;&#x65E0;&#x9650;&#x5927;&#x3002;&#x76F4;&#x5230;OOM <br>   BackpressureStrategy.BUFFER    <br>   // &#x9ED8;&#x8BA4;128 &#xFF0C;&#x8D85;&#x8FC7;128&#x540E;&#x6765;&#x7684;&#x6570;&#x636E;&#x4F1A;&#x88AB;&#x4E22;&#x6389; <br>   BackpressureStrategy.DROP   <br>   // &#x9ED8;&#x8BA4;128 &#xFF0C;&#x8D85;&#x8FC7;128&#x5C31;&#x4F1A;&#x53EA;&#x4F1A;&#x4FDD;&#x7559;&#x6700;&#x540E;&#x7684;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x3002;  &#x6700;&#x540E;&#x603B;&#x4E2A;&#x6570; &#x662F; 129 <br>   BackpressureStrategy.LATEST  <br>   </td>
</tr>
<tr>
<td>SingleEmitter</td>
<td>&#x7528;&#x6765;&#x53D1;&#x5C04;&#x4E00;&#x6761;&#x5355;&#x4E00;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4E14;&#x4E00;&#x6B21;&#x8BA2;&#x9605;&#x53EA;&#x80FD;&#x8C03;&#x7528;&#x4E00;&#x6B21; <br>  singleEmitter.onSuccess()  <br>   <br>  // onSuccess&#x4E0E;onError&#x53EA;&#x53EF;&#x8C03;&#x7528;&#x4E00;&#x4E2A;  &#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x62A5;&#x5F02;&#x5E38; <br>  singleEmitter.onError()</td>
</tr>
<tr>
<td>Subject</td>
<td>&#x4E3B;&#x9898; , &#x4E0D;&#x652F;&#x6301;&#x80CC;&#x538B;&#x63A7;&#x5236;  <br>  &#x4E00;&#x79CD;&#x7279;&#x6B8A;&#x7684;&#x5B58;&#x5728; &#xFF0C;&#x540C;&#x65F6;&#x662F; &#x6570;&#x636E;&#x63A5;&#x6536;&#x8005; &#x548C; &#x53D1;&#x9001;&#x8005;</td>
</tr>
<tr>
<td>AsyncSubject</td>
<td>&#x65E0;&#x8BBA;&#x8F93;&#x5165;&#x591A;&#x5C11;&#x53C2;&#x6570;&#xFF0C;&#x6C38;&#x8FDC;&#x53EA;&#x8F93;&#x51FA;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x53C2;&#x6570;  ,  <br> &#x5982;&#x679C;&#x56E0;&#x4E3A;&#x53D1;&#x751F;&#x4E86;&#x9519;&#x8BEF;&#x800C;&#x7EC8;&#x6B62;&#xFF0C;AsyncSubject&#x5C06;&#x4E0D;&#x4F1A;&#x53D1;&#x5C04;&#x4EFB;&#x4F55;&#x6570;&#x636E;</td>
</tr>
<tr>
<td>BehaviorSubject</td>
<td>&#x4F1A;&#x53D1;&#x9001;&#x79BB;&#x8BA2;&#x9605;&#x6700;&#x8FD1;&#x7684;&#x4E0A;&#x4E00;&#x4E2A;&#x503C;&#xFF0C;&#x6CA1;&#x6709;&#x4E0A;&#x4E00;&#x4E2A;&#x503C;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x53D1;&#x9001;&#x9ED8;&#x8BA4;&#x503C;&#x3002;  <br> &#x5982;&#x679C;&#x9047;&#x5230;&#x9519;&#x8BEF;&#x4F1A;&#x76F4;&#x63A5;&#x4E2D;&#x65AD;</td>
</tr>
<tr>
<td>PublishSubject</td>
<td>&#x4E00;&#x65E6;&#x4E00;&#x4E2A;&#x89C2;&#x5BDF;&#x8005;&#x8BA2;&#x9605;&#x4E86;&#x8BE5;Subject&#xFF0C;&#x5B83;&#x4F1A;&#x53D1;&#x9001;&#x6240;&#x6709;&#x6570;&#x636E;&#x7ED9;&#x8BA2;&#x9605;&#x8005;&#x3002;  <br>  &#x5982;&#x679C;&#x63A5;&#x6536;&#x8005;&#x53EA;&#x5173;&#x7CFB;&#x81EA;&#x5DF1;&#x8BA2;&#x9605;&#x7684;&#x4FE1;&#x606F; &#xFF0C;&#x53EF;&#x4EE5;&#x7528;ofType&#x6765;&#x8FC7;&#x6EE4;  <br>  &#x8BA2;&#x9605;&#x8005;&#x53EA;&#x4F1A;&#x63A5;&#x53D7;&#x8BA2;&#x9605;&#x4E4B;&#x540E;&#x7684;&#x6765;&#x81EA;PublishSubject&#x53D1;&#x5C04;&#x7684;&#x6570;&#x636E;&#x3002;</td>
</tr>
<tr>
<td>ReplaySubject</td>
<td>&#x65E0;&#x8BBA;&#x4F55;&#x65F6;&#x8BA2;&#x9605;&#xFF0C;&#x90FD;&#x4F1A;&#x5C06;&#x6240;&#x6709;&#x5386;&#x53F2;&#x8BA2;&#x9605;&#x5185;&#x5BB9;&#x5168;&#x90E8;&#x53D1;&#x51FA;</td>
</tr>
<tr>
<td>Processor</td>
<td>rxjava2.x&#x65B0;&#x589E;&#x7684; &#xFF0C;&#x4F5C;&#x7528;&#x4E0E;Subject&#x4E00;&#x6837; &#x3002; <br> &#x652F;&#x6301;&#x80CC;&#x538B;&#x63A7;&#x5236;</td>
</tr>
<tr>
<td>AsyncProcessor</td>
<td></td>
</tr>
<tr>
<td>BehaviorProcessor</td>
<td></td>
</tr>
<tr>
<td>PublishProcessor</td>
<td></td>
</tr>
<tr>
<td>ReplayProcessor</td>
<td></td>
</tr>
<tr>
<td>Transformer</td>
<td>&#x8F6C;&#x6362;&#x5668; &#xFF0C;  &#x5B9E;&#x9645;&#x4E0A;&#x5C31;&#x662F;Func1<observable ,="" observable="">&#xFF0C;  <br>  &#x6362;&#x53E5;&#x8BDD;&#x8BF4;&#x5C31;&#x662F;&#x63D0;&#x4F9B;&#x7ED9;&#x4ED6;&#x4E00;&#x4E2A;Observable&#x5B83;&#x4F1A;&#x8FD4;&#x56DE;&#x7ED9;&#x4F60;&#x53E6;&#x4E00;&#x4E2A;Observable</observable></td>
</tr>
<tr>
<td>ObservableTransformer</td>
<td></td>
</tr>
<tr>
<td>SingleTransformer</td>
<td></td>
</tr>
<tr>
<td>CompletableTransformer</td>
<td></td>
</tr>
<tr>
<td>FlowableTransformer</td>
<td></td>
</tr>
<tr>
<td>MaybeTransformer</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="rxjava20&#x4E2D;&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;"><a name="rxjava20&#x4E2D;&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;" class="anchor-navigation-ex-anchor" href="#rxjava20&#x4E2D;&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>11.3. RxJava2.0&#x4E2D;&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;</h2>
<table>
<thead>
<tr>
<th>RxJava2.0&#x4E2D;&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Observable / Observer</td>
<td>&#x4E0D;&#x652F;&#x6301;&#x80CC;&#x538B;&#xFF0C;&#x53CA;&#x65E0;&#x6CD5;&#x5904;&#x7406;&#x53D1;&#x9001;&#x6570;&#x636E;&#x901F;&#x5EA6;&#x4E0D;&#x534F;&#x8C03;&#x7684;&#x95EE;&#x9898;&#x3002;  <br>  </td>
</tr>
<tr>
<td>Flowable/ Subscriber</td>
<td></td>
</tr>
<tr>
<td>Single/ SingleObserver</td>
<td>&#x53EA;&#x53D1;&#x5C04;&#x4E00;&#x6761;&#x5355;&#x4E00;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x6216;&#x8005;&#x4E00;&#x6761;&#x5F02;&#x5E38;&#x901A;&#x77E5;&#xFF0C;  <br>  &#x4E0D;&#x80FD;&#x53D1;&#x5C04;&#x5B8C;&#x6210;&#x901A;&#x77E5;&#xFF0C;&#x5176;&#x4E2D;&#x6570;&#x636E;&#x4E0E;&#x901A;&#x77E5;&#x53EA;&#x80FD;&#x53D1;&#x5C04;&#x4E00;&#x4E2A;&#x3002;  <br>  // &#x53EF;&#x4EE5;&#x6307;&#x5B9A;Schedulers&#x5B9E;&#x73B0;&#x5F02;&#x6B65;&#x5904;&#x7406; &#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x88AB;&#x8BA2;&#x9605;&#x662F;&#x4E0D;&#x4F1A;&#x88AB;&#x8C03;&#x7528;&#x7684;  <br> Single.create  <br>   <br> // &#x63A5;&#x6536;&#x4F20;&#x5165;&#x7684;&#x53C2;&#x6570; &#xFF0C;&#x662F;&#x4E00;&#x79CD;&#x7279;&#x6B8A;&#x7684;create() &#xFF0C;&#x53EA;&#x4F1A;&#x5728;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x91CC;&#x6267;&#x884C; , &#x4E0D;&#x7BA1;&#x662F;&#x5426;&#x88AB; &#x8BA2;&#x9605;&#x5747;&#x4F1A;&#x88AB;&#x8C03;&#x7528;  <br> Single.just  <br>   <br> // &#x4EC5;&#x4EC5;&#x7528;&#x6765;&#x8FDE;&#x63A5;Single&#x987A;&#x5E8F;&#x6267;&#x884C;&#x7684;&#xFF0C;&#x6BD4;&#x5982;&#x987A;&#x5E8F;&#x6267;&#x884C;&#x68C0;&#x67E5;&#x7F51;&#x7EDC;&#xFF0C;&#x68C0;&#x67E5;&#x5185;&#x5B58; &#xFF0C;&#x6CE8;&#x610F;&#xFF1A;&#x5982;&#x679C;&#x67D0;&#x4E2A;Single&#x8C03;&#x7528;&#x4E86;onError()&#x4F1A;&#x5BFC;&#x81F4;&#x88AB;&#x4E2D;&#x65AD;  <br> Single.concat  <br>   <br> // &#x5C06;&#x591A;&#x4E2A;Single&#x6574;&#x5408;&#x4E3A;&#x4E00;&#x4E2A;  <br> Single.zip  <br>   <br> //   <br> Observable.just().zipWith()  <br>   <br> //&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x81EA;&#x5B9A;&#x4E49;&#x7684;&#x64CD;&#x4F5C;&#x7B26;&#xFF0C;&#x7528;&#x6765;&#x5904;&#x7406;&#x6570;&#x636E;&#x53D1;&#x9001;&#x8005; &#x3002;  <br> &#x5C31;&#x662F;&#x5BF9;&#x5F53;&#x524D;Observable&#x8FDB;&#x884C;&#x64CD;&#x4F5C;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x8FD4;&#x56DE;&#x5B83;   <br> Single.compose  <br>   <br> //   <br> Single.subscribe  <br>   <br> // &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x9519;&#x8BEF;&#xFF0C; &#x4E00;&#x822C;&#x7528;&#x4E8E;&#x8C03;&#x8BD5;  <br> Single.error  <br>   <br> // &#x7528;&#x4E8E;&#x4E00;&#x5BF9;0~&#x591A;&#x7684;&#x8FD4;&#x56DE;  <br> Single.just( ... ).flatMap()  <br>   <br> // &#x4E00;&#x822C;map()&#x662F;&#x7528;&#x4E8E;&#x4E00;&#x5BF9;&#x4E00;&#x7684;&#x8FD4;&#x56DE;  <br> Single.just( ).map()  <br>   <br> // &#x5B83;&#x652F;&#x6301;&#x5C06;Single&#x8F6C;&#x5316;&#x4E3A;Observable&#x5BF9;&#x8C61;&#xFF0C;&#x53EF;&#x4EE5;&#x8FD4;&#x56DE;&#x591A;&#x4E2A;&#x503C;  <br> Single.just( ).flatMapObservable()  <br>   <br> //  &#x7C7B;&#x4F3C;&#x4E8E;concat &#xFF0C;&#x5982;&#x679C;&#x6709;&#x4E2D;&#x65AD; &#xFF0C;&#x540E;&#x9762;&#x90FD;&#x4F1A;&#x4E2D;&#x65AD;  <br> Single.merge()  <br>   <br> //   <br> Single.just().mergeWith()  <br>   <br> // &#x7528;&#x4E8E;&#x6307;&#x5B9A;&#x5F02;&#x6B65;&#x4EFB;&#x52A1;&#x7684;&#x7EBF;&#x7A0B;  <br> Single.just().subscribeOn()  <br>   <br> // &#x76F8;&#x5F53;&#x4E8E;try catch&#x4E2D;&#x7684;return&#xFF0C;&#x5177;&#x4F53;&#x610F;&#x601D;&#x5C31;&#x662F;&#x5F53;&#x51FD;&#x6570;&#x629B;&#x51FA;&#x9519;&#x8BEF;&#x7684;&#x65F6;&#x5019;&#x7ED9;&#x51FA;&#x4E00;&#x4E2A;&#x8FD4;&#x56DE;&#x503C;  <br> Single.just().onErrorReturn()  <br>   <br> // &#x6307;&#x5B9A;&#x56DE;&#x8C03;&#x6240;&#x5728;&#x7EBF;&#x7A0B;  <br> Single.just().observeOn()  <br>   <br> // &#x8D85;&#x65F6;&#x8BBE;&#x7F6E;  <br> Single.just().timeout()  <br>   <br> //   <br>  Single.just( ).toString()</td>
</tr>
<tr>
<td>Completable/ CompletableObserver</td>
<td>&#x53EA;&#x53D1;&#x5C04;&#x4E00;&#x6761;&#x5B8C;&#x6210;&#x901A;&#x77E5;&#xFF0C;&#x6216;&#x8005;&#x4E00;&#x6761;&#x5F02;&#x5E38;&#x901A;&#x77E5;&#xFF0C; <br> &#x4E0D;&#x80FD;&#x53D1;&#x5C04;&#x6570;&#x636E;&#xFF0C;&#x5176;&#x4E2D;&#x5B8C;&#x6210;&#x901A;&#x77E5;&#x4E0E;&#x5F02;&#x5E38;&#x901A;&#x77E5;&#x53EA;&#x80FD;&#x53D1;&#x5C04;&#x4E00;&#x4E2A;</td>
</tr>
<tr>
<td>Maybe/ MaybeObserver</td>
<td>&#x53EF;&#x53D1;&#x5C04;&#x4E00;&#x6761;&#x5355;&#x4E00;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4EE5;&#x53CA;&#x53D1;&#x5C04;&#x4E00;&#x6761;&#x5B8C;&#x6210;&#x901A;&#x77E5;&#xFF0C;  <br>  &#x6216;&#x8005;&#x4E00;&#x6761;&#x5F02;&#x5E38;&#x901A;&#x77E5;&#xFF0C;&#x5176;&#x4E2D;&#x5B8C;&#x6210;&#x901A;&#x77E5;&#x548C;&#x5F02;&#x5E38;&#x901A;&#x77E5;&#x53EA;&#x80FD;&#x53D1;&#x5C04;&#x4E00;&#x4E2A;&#xFF0C;  <br>  &#x53D1;&#x5C04;&#x6570;&#x636E;&#x53EA;&#x80FD;&#x5728;&#x53D1;&#x5C04;&#x5B8C;&#x6210;&#x901A;&#x77E5;&#x6216;&#x8005;&#x5F02;&#x5E38;&#x901A;&#x77E5;&#x4E4B;&#x524D;&#xFF0C;&#x5426;&#x5219;&#x53D1;&#x5C04;&#x6570;&#x636E;&#x65E0;&#x6548;&#x3002;</td>
</tr>
</tbody>
</table>
<h2 id="rxjava2&#x64CD;&#x4F5C;&#x7B26;"><a name="rxjava2&#x64CD;&#x4F5C;&#x7B26;" class="anchor-navigation-ex-anchor" href="#rxjava2&#x64CD;&#x4F5C;&#x7B26;"><i class="fa fa-link" aria-hidden="true"></i></a>11.4. RXjava2&#x64CD;&#x4F5C;&#x7B26;</h2>
<p>&#x6240;&#x8C13;&#x7684;&#x64CD;&#x4F5C;&#x7B26;&#x5C31;&#x662F;&#x4E00;&#x4E9B;&#x88AB;Rxjava&#x5C01;&#x88C5;&#x597D;&#x7684;&#x65B9;&#x6CD5;&#x6216;API &#xFF0C;&#x4F7F;&#x7528;&#x8FD9;&#x4E9B;&#x64CD;&#x4F5C;&#x7B26;&#x5C31;&#x53EF;&#x4EE5;&#x5B8C;&#x6210;&#x7EBF;&#x7A0B;&#x8C03;&#x5EA6;&#xFF0C;&#x6570;&#x636E;&#x8FC7;&#x6EE4;&#x7B49;&#x529F;&#x80FD; &#x3002;</p>
<table>
<thead>
<tr>
<th>&#x64CD;&#x4F5C;&#x7B26;&#x7C7B;&#x578B;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>create()</td>
<td>&#x521B;&#x5EFA;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x5BF9;&#x8C61;</td>
</tr>
<tr>
<td>just()</td>
<td>&#x5FEB;&#x901F;&#x7684;&#x521B;&#x5EFA;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x5BF9;&#x8C61;</td>
</tr>
<tr>
<td>fromArray()</td>
<td>&#x5C06;&#x6570;&#x7EC4;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x8F6C;&#x6362;&#x4E3A;Observable&#x5BF9;&#x8C61;</td>
</tr>
<tr>
<td>fromIterable()</td>
<td>&#x5C06;List&#x4E2D;&#x7684;&#x6570;&#x636E;&#x8F6C;&#x6362;&#x4E3A;Observable&#x5BF9;&#x8C61;</td>
</tr>
<tr>
<td>empty()</td>
<td>&#x7528;&#x4E8E;&#x6D4B;&#x8BD5; &#xFF0C;&#x4EC5;&#x53D1;&#x9001;Complete&#x4E8B;&#x4EF6;  </td>
</tr>
<tr>
<td>error()</td>
<td>&#x7528;&#x4E8E;&#x6D4B;&#x8BD5; &#xFF0C;&#x4EC5;&#x53D1;&#x9001;Error&#x4E8B;&#x4EF6;</td>
</tr>
<tr>
<td>never()</td>
<td>&#x4E0D;&#x53D1;&#x5C04;&#x6570;&#x636E;&#xFF0C;&#x4E5F;&#x6C38;&#x8FDC;&#x4E0D;&#x4F1A;&#x7ED3;&#x675F;</td>
</tr>
<tr>
<td>defer()</td>
<td>&#x76F4;&#x5230;&#x6709;&#x89C2;&#x5BDF;&#x8005;&#x8BA2;&#x9605;&#x65F6;&#xFF0C;&#x624D;&#x521B;&#x5EFA;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x5BF9;&#x8C61;&amp;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;  <br>  &#x6BCF;&#x6B21;&#x8BA2;&#x9605;&#x540E;&#xFF0C;&#x90FD;&#x4F1A;&#x5F97;&#x5230;&#x4E00;&#x4E2A;&#x521A;&#x521B;&#x5EFA;&#x7684;&#x6700;&#x65B0;&#x7684;Observable&#x5BF9;&#x8C61;</td>
</tr>
<tr>
<td>timer()</td>
<td>&#x5EF6;&#x8FDF;&#x6307;&#x5B9A;&#x65F6;&#x95F4;&#x540E;&#xFF0C;&#x53D1;&#x9001;1&#x4E2A;&#x6570;&#x503C;0</td>
</tr>
<tr>
<td>interval()</td>
<td>&#x6BCF;&#x9694;&#x6307;&#x5B9A;&#x65F6;&#x95F4;&#x5C31;&#x52A0;n&#x5E76;&#x53D1;&#x9001;&#x51FA;&#x53BB;</td>
</tr>
<tr>
<td>range()</td>
<td>&#x8FDE;&#x7EED;&#x53D1;&#x9001;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x5E8F;&#x5217;&#xFF0C;&#x53EF;&#x6307;&#x5B9A;&#x8303;&#x56F4;</td>
</tr>
<tr>
<td>rangeLong()</td>
<td>&#x8DDF; range()&#x7C7B;&#x4F3C;&#xFF0C;&#x652F;&#x6301;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x4E3A;Long</td>
</tr>
<tr>
<td>intervalRange()</td>
<td>&#x6BCF;&#x9694;&#x6307;&#x5B9A;&#x65F6;&#x95F4; &#x5C31;&#x53D1;&#x9001; &#x4E8B;&#x4EF6;&#xFF0C;&#x53EF;&#x6307;&#x5B9A;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x7684;&#x6570;&#x91CF;</td>
</tr>
<tr>
<td>map()</td>
<td>&#x5C06;&#x4F20;&#x5165;&#x6570;&#x636E;&#x5904;&#x7406;&#x540E;&#x8FD4;&#x56DE; &#x3002;<br> &#x8F93;&#x5165;&#x548C;&#x8F93;&#x51FA;&#x662F;&#x4E00;&#x5BF9;&#x4E00;</td>
</tr>
<tr>
<td>flatMap()</td>
<td>&#x8F93;&#x5165;&#x548C;&#x8F93;&#x51FA;&#x53EF;&#x4EE5;&#x662F; &#x4E00;&#x5BF9;&#x591A; <br> &#x4E0D;&#x80FD;&#x4FDD;&#x8BC1; &#x8F93;&#x51FA;&#x7684;&#x987A;&#x5E8F;&#x548C;&#x8F93;&#x5165;&#x7684;&#x987A;&#x5E8F;&#x4E00;&#x81F4;</td>
</tr>
<tr>
<td>concatMap</td>
<td>&#x8F93;&#x5165;&#x548C;&#x8F93;&#x51FA;&#x53EF;&#x4EE5;&#x662F;&#x4E00;&#x5BF9;&#x5BF9; <br>  &#x8F93;&#x51FA;&#x548C;&#x8F93;&#x5165;&#x987A;&#x5E8F; &#x4E25;&#x683C;&#x4E00;&#x81F4;</td>
</tr>
<tr>
<td>buffer()</td>
<td>&#x6BCF;&#x6B21;&#x53D6;n&#x4E2A;&#x4E8B;&#x4EF6;&#x653E;&#x5230;&#x7F13;&#x5B58;&#x533A;&#x4E2D;&#xFF0C;n&#x53EF;&#x914D;&#x7F6E;</td>
</tr>
<tr>
<td>filter()</td>
<td>&#x5C06;&#x7B26;&#x5408;&#x81EA;&#x5B9A;&#x4E49;&#x6761;&#x4EF6;&#x7684;&#x4E8B;&#x4EF6;&#x8FC7;&#x6EE4;&#x51FA;&#x6765;</td>
</tr>
<tr>
<td>ofType()</td>
<td>&#x8FC7;&#x6EE4; &#x7279;&#x5B9A;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x7684;&#x6570;&#x636E;</td>
</tr>
<tr>
<td>skip()</td>
<td>&#x8DF3;&#x8FC7;&#x6B63;&#x5E8F;&#x7684;&#x524D; n &#x9879;</td>
</tr>
<tr>
<td>skipLast()</td>
<td>&#x8DF3;&#x8FC7;&#x6B63;&#x5E8F;&#x7684;&#x540E; n &#x9879;</td>
</tr>
<tr>
<td>distinct()</td>
<td>&#x53BB;&#x6389;&#x5E8F;&#x5217;&#x4E2D;&#x91CD;&#x590D;&#x7684;&#x4E8B;&#x4EF6;</td>
</tr>
<tr>
<td>distinctUntilChanged()</td>
<td>&#x53BB;&#x6389;&#x5E8F;&#x5217;&#x4E2D;&#x8FDE;&#x7EED;&#x91CD;&#x590D;&#x7684;&#x4E8B;&#x4EF6;</td>
</tr>
<tr>
<td>take()</td>
<td>&#x6307;&#x5B9A;&#x89C2;&#x5BDF;&#x8005;&#x6700;&#x591A;&#x80FD;&#x63A5;&#x6536;&#x5230;&#x7684;&#x4E8B;&#x4EF6;&#x6570;&#x91CF;</td>
</tr>
<tr>
<td>takeLast()</td>
<td>&#x6307;&#x5B9A;&#x89C2;&#x5BDF;&#x8005;&#x53EA;&#x80FD;&#x63A5;&#x6536;&#x5230;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x53D1;&#x9001;&#x7684;&#x6700;&#x540E;&#x51E0;&#x4E2A;&#x4E8B;&#x4EF6;</td>
</tr>
<tr>
<td>throttleFirst()</td>
<td>&#x5728;&#x67D0;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x53EA;&#x53D1;&#x9001;&#x8BE5;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#x7B2C;1&#x6B21;&#x4E8B;&#x4EF6;</td>
</tr>
<tr>
<td>throttleLast()</td>
<td>&#x5728;&#x67D0;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x53EA;&#x53D1;&#x9001;&#x8BE5;&#x6BB5;&#x65F6;&#x95F4;&#x5185; &#x6700;&#x540E;1&#x6B21;&#x4E8B;&#x4EF6;</td>
</tr>
<tr>
<td>sample()</td>
<td>&#x6307;&#x5B9A;&#x65F6;&#x95F4;&#x5185; &#x53D6;&#x4E00;&#x6B21;&#x6570;&#x636E; &#xFF0C;&#x5176;&#x4ED6;&#x7684;&#x6570;&#x636E;&#x5C31;&#x4F1A;&#x88AB;&#x4E22;&#x6389;</td>
</tr>
<tr>
<td>throttleWithTimeout()</td>
<td>&#x5728;&#x8F93;&#x51FA;&#x4E86;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x540E;&#x7684;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#xFF0C;&#x6CA1;&#x6709;&#x518D;&#x6B21;&#x8F93;&#x51FA;&#x65B0;&#x7684;&#x6570;&#x636E;&#xFF0C;  <br>   &#x5219;&#x628A;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x771F;&#x6B63;&#x7684;&#x53D1;&#x9001;&#x51FA;&#x53BB;&#xFF1B;   <br>  &#x5047;&#x5982;&#x5728;&#x8FD9;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#x6709;&#x65B0;&#x7684;&#x6570;&#x636E;&#x8F93;&#x51FA;&#xFF0C;&#x5219;&#x4EE5;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x4F5C;&#x4E3A;&#x5C06;&#x8981;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x9879;&#xFF0C;  <br>  &#x5E76;&#x4E14;&#x91CD;&#x7F6E;&#x8FD9;&#x4E2A;&#x65F6;&#x95F4;&#x6BB5;&#xFF0C;&#x91CD;&#x65B0;&#x8BA1;&#x65F6;</td>
</tr>
<tr>
<td>debounce ()</td>
<td>&#x8DDF; throttleWithTimeout() &#x4E00;&#x6837;</td>
</tr>
<tr>
<td>firstElement()</td>
<td>&#x4EC5;&#x9009;&#x53D6;&#x7B2C;1&#x4E2A;&#x5143;&#x7D20;</td>
</tr>
<tr>
<td>lastElement()</td>
<td>&#x4EC5;&#x9009;&#x53D6;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x5143;&#x7D20;</td>
</tr>
<tr>
<td>elementAt()</td>
<td>&#x63A5;&#x6536;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#x7684;&#x67D0;&#x4E2A;&#x5143;&#x7D20; &#xFF0C; <br>  &#x7D22;&#x5F15;&#x8D8A;&#x754C;&#x4E5F;&#x4E0D;&#x4F1A;&#x62A5;&#x5F02;&#x5E38;</td>
</tr>
<tr>
<td>elementAtOrError()</td>
<td>&#x63A5;&#x6536;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#x7684;&#x67D0;&#x4E2A;&#x5143;&#x7D20; &#xFF0C; <br>  &#x7D22;&#x5F15;&#x8D8A;&#x754C; &#x4F1A;&#x62A5;&#x5F02;&#x5E38;</td>
</tr>
<tr>
<td>all()</td>
<td>&#x5224;&#x65AD;&#x53D1;&#x9001;&#x7684;&#x6240;&#x6709;&#x6570;&#x636E;&#x662F;&#x5426;&#x90FD;&#x6EE1;&#x8DB3;&#x81EA;&#x5B9A;&#x4E49;&#x7684;&#x6761;&#x4EF6; , true false</td>
</tr>
<tr>
<td>takeWhile()</td>
<td>&#x5224;&#x65AD;&#x53D1;&#x9001;&#x7684;&#x6BCF;&#x9879;&#x6570;&#x636E;&#x662F;&#x5426;&#x6EE1;&#x8DB3; &#x81EA;&#x5B9A;&#x4E49;&#x6761;&#x4EF6;   <br>  &#x82E5;&#x6EE1;&#x8DB3;&#x6761;&#x4EF6;&#x5219;&#x53D1;&#x9001; ,&#x4E0D;&#x6EE1;&#x8DB3;&#x4E0D;&#x53D1;&#x9001;</td>
</tr>
<tr>
<td>skipWhile()</td>
<td>&#x4E00;&#x76F4;&#x8DF3;&#x8FC7;&#xFF0C;&#x76F4;&#x5230;&#x6EE1;&#x8DB3;&#x81EA;&#x5B9A;&#x4E49;&#x6761;&#x4EF6;</td>
</tr>
<tr>
<td>skipUntil()</td>
<td>-</td>
</tr>
<tr>
<td>takeUntil()</td>
<td>&#x4E00;&#x76F4;&#x53D1;&#x9001; &#xFF0C;&#x76F4;&#x5230;&#x67D0;&#x4E2A;&#x6761;&#x4EF6;</td>
</tr>
<tr>
<td>sequenceEqual()</td>
<td>&#x4E24;&#x4E2A;&#x6570;&#x636E;&#x6E90;&#x7684;&#x6570;&#x636E;&#x662F;&#x5426;&#x76F8;&#x540C;</td>
</tr>
<tr>
<td>isEmpty()</td>
<td>&#x6570;&#x636E;&#x6E90;&#x7684;&#x6570;&#x636E;&#x662F;&#x5426;&#x4E3A;&#x7A7A;</td>
</tr>
<tr>
<td>contains()</td>
<td>&#x6570;&#x636E;&#x6E90;&#x4E2D;&#x662F;&#x5426;&#x5305;&#x542B;&#x6307;&#x5B9A;&#x6570;&#x636E;</td>
</tr>
<tr>
<td>defaultIfEmpty( obj)</td>
<td>&#x5728;&#x4E0D;&#x53D1;&#x9001;&#x4EFB;&#x4F55;&#x6709;&#x6548;&#x4E8B;&#x4EF6;&#xFF08; Next&#x4E8B;&#x4EF6;&#xFF09;&#x3001;&#x4EC5;&#x53D1;&#x9001;&#x4E86; Complete &#x4E8B;&#x4EF6;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#xFF0C;&#x53D1;&#x9001;&#x4E2A;&#x9ED8;&#x8BA4;&#x503C;obj</td>
</tr>
<tr>
<td>amb()</td>
<td>&#x5F53;&#x6709;&#x591A;&#x4E2A;&#x6570;&#x636E;&#x6E90;&#x9700;&#x8981;&#x53D1;&#x9001;&#x6570;&#x636E;&#x65F6; &#xFF0C; <br>  &#x53EA;&#x53D1;&#x9001; &#x5148;&#x53D1;&#x9001;&#x6570;&#x636E;&#x7684;Observable&#x7684;&#x6570;&#x636E;&#xFF0C;&#x800C;&#x5176;&#x4F59; Observable&#x88AB;&#x4E22;&#x5F03;&#x3002;</td>
</tr>
<tr>
<td>concat()</td>
<td>&#x7EC4;&#x5408;&#x591A;&#x4E2A;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x4E00;&#x8D77;&#x53D1;&#x9001;&#x6570;&#x636E;&#xFF0C;&#x5408;&#x5E76;&#x540E; &#x6309;&#x53D1;&#x9001;&#x987A;&#x5E8F;&#x4E32;&#x884C;&#x6267;&#x884C;</td>
</tr>
<tr>
<td>concatArray()</td>
<td>&#x8DDF;concat()&#x7C7B;&#x4F3C;</td>
</tr>
<tr>
<td>merge()</td>
<td>&#x7EC4;&#x5408;&#x591A;&#x4E2A;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x4E00;&#x8D77;&#x53D1;&#x9001;&#x6570;&#x636E;&#xFF0C;&#x5408;&#x5E76;&#x540E; &#x6309;&#x65F6;&#x95F4;&#x7EBF;&#x5E76;&#x884C;&#x6267;&#x884C;  <br>  &#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x6570;&#x91CF;&#x2264;4</td>
</tr>
<tr>
<td>mergeArray()</td>
<td>&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x6570;&#x91CF; &gt; 4</td>
</tr>
<tr>
<td>mergeWith()</td>
<td></td>
</tr>
<tr>
<td>delay()</td>
<td>&#x4F7F;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x5EF6;&#x8FDF;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x518D;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;</td>
</tr>
<tr>
<td>concatDelayError()</td>
<td>&#x4F7F;&#x7528;concat()&#xFF0C;&#x4E00;&#x65E6;&#x67D0;&#x4E2A;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x53D1;&#x51FA;onError&#x4E8B;&#x4EF6;&#xFF0C;&#x5176;&#x4ED6;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x5C31;&#x4F1A;&#x7EC8;&#x6B62;&#x53D1;&#x9001;&#x3002; <br> &#x4E3A;&#x4E86;&#x8BA9;&#x5176;&#x4ED6;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x7EE7;&#x7EED;&#x53D1;&#x9001;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x8FD9;&#x4E2A;&#x64CD;&#x4F5C;&#x7B26;</td>
</tr>
<tr>
<td>concatArrayDelayError()</td>
<td></td>
</tr>
<tr>
<td>mergeDelayError()</td>
<td></td>
</tr>
<tr>
<td>combineLatestDelayError()</td>
<td></td>
</tr>
<tr>
<td>reduce()</td>
<td>&#x628A;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x9700;&#x8981;&#x53D1;&#x9001;&#x7684;&#x4E8B;&#x4EF6;&#x805A;&#x5408;&#x6210;1&#x4E2A;&#x4E8B;&#x4EF6;&#x3001;&#x53D1;&#x9001;</td>
</tr>
<tr>
<td>collect()</td>
<td>&#x5C06;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x4E8B;&#x4EF6;&#x6536;&#x96C6;&#x5230;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x91CC;</td>
</tr>
<tr>
<td>startWith()</td>
<td>&#x5728;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;&#x524D;&#xFF0C;&#x8FFD;&#x52A0;&#x53D1;&#x9001;&#x4E00;&#x4E9B;&#x6570;&#x636E;</td>
</tr>
<tr>
<td>startWithArray()</td>
<td></td>
</tr>
<tr>
<td>count()</td>
<td>&#x7EDF;&#x8BA1;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;&#x7684;&#x6570;&#x91CF;</td>
</tr>
<tr>
<td>subscribe()</td>
<td>&#x8BA2;&#x9605;&#xFF0C; &#x8FDE;&#x63A5;&#x89C2;&#x5BDF;&#x8005; &#x548C; &#x88AB;&#x89C2;&#x5BDF;&#x8005;</td>
</tr>
<tr>
<td>zip()</td>
<td>&#x591A;&#x4E2A;&#x6570;&#x636E;&#x6E90;Observable &#x53D1;&#x9001;&#x6570;&#x636E;&#xFF0C;&#x7ECF;&#x8FC7;&#x81EA;&#x5B9A;&#x4E49;&#x7EC4;&#x5408;&#x5904;&#x7406;&#x540E;&#xFF0C;&#x89C2;&#x5BDF;&#x8005;&#x518D;&#x6536;&#x5230; &#x3002; <br> <br> 1&#x3001;&#x7EC4;&#x5408;&#x6570;&#x636E;&#x65F6;&#x4E25;&#x683C;&#x6309;&#x7167;&#x987A;&#x5E8F;&#x4ECE;&#x591A;&#x4E2A;&#x6570;&#x636E;&#x6E90;&#x4E2D;&#x62FF;&#x6570;&#x636E;&#x3002;<br> 2&#x3001;&#x6700;&#x540E;&#x89C2;&#x5BDF;&#x8005;&#x6536;&#x5230;&#x7684;&#x6570;&#x636E;&#x4E2A;&#x6570; &#x8DDF;&#x53D1;&#x9001;&#x6700;&#x5C11;&#x6570;&#x636E;&#x7684;&#x6570;&#x636E;&#x6E90;&#x7684;&#x6570;&#x636E;&#x4E2A;&#x6570;&#x76F8;&#x540C;&#x3002;</td>
</tr>
<tr>
<td>x.zipWith()</td>
<td></td>
</tr>
<tr>
<td>combineLatest()</td>
<td>&#x5982;&#x679C;&#x5B50;&#x6D41;1&#x5728;&#x7B49;&#x5F85;&#x5176;&#x4ED6;&#x6D41;&#x53D1;&#x5C04;&#x6570;&#x636E;&#x671F;&#x95F4;&#x53C8;&#x53D1;&#x5C04;&#x4E86;&#x65B0;&#x6570;&#x636E;&#xFF0C;  <br> &#x5219;&#x4F7F;&#x7528;&#x5B50;&#x6D41;&#x6700;&#x65B0;&#x53D1;&#x5C04;&#x7684;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x5408;&#x5E76;</td>
</tr>
<tr>
<td>x.concatMap()</td>
<td></td>
</tr>
<tr>
<td>x.scan()</td>
<td></td>
</tr>
<tr>
<td>x.window()</td>
<td></td>
</tr>
<tr>
<td>subscribeOn()</td>
<td>&#x6307;&#x5B9A;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;&#x7684;&#x7EBF;&#x7A0B;  <br>  &#x53EA;&#x6709;&#x7B2C;&#x4E00;&#x6B21;&#x6307;&#x5B9A;&#x6709;&#x6548;&#xFF0C;&#x5176;&#x4F59;&#x7684;&#x6307;&#x5B9A;&#x7EBF;&#x7A0B;&#x65E0;&#x6548;</td>
</tr>
<tr>
<td>unsubscribeOn()</td>
<td>&#x53D6;&#x6D88;&#x8BA2;&#x9605;</td>
</tr>
<tr>
<td>observeOn()</td>
<td>&#x6307;&#x5B9A;&#x63A5;&#x6536;&#x4E8B;&#x4EF6;&#x7684;&#x7EBF;&#x7A0B;  <br>  &#x6BCF;&#x6B21;&#x6307;&#x5B9A;&#x5747;&#x6709;&#x6548;</td>
</tr>
<tr>
<td>doOnEach()</td>
<td>&#x6BCF;&#x53D1;&#x9001;&#x4E00;&#x6B21;&#x5C31;&#x4F1A;&#x8C03;&#x7528;&#x4E00;&#x6B21;</td>
</tr>
<tr>
<td>doOnNext ()</td>
<td>&#x6267;&#x884C; next&#x4E4B;&#x524D;&#x8C03;&#x7528;</td>
</tr>
<tr>
<td>doAfterNext()</td>
<td>&#x6267;&#x884C; next&#x4E4B;&#x540E;&#x8C03;&#x7528;</td>
</tr>
<tr>
<td>doOnError()</td>
<td></td>
</tr>
<tr>
<td>doOnComplete()</td>
<td></td>
</tr>
<tr>
<td>doOnTerminate()</td>
<td></td>
</tr>
<tr>
<td>doFinally()</td>
<td></td>
</tr>
<tr>
<td>doOnSubscribe()</td>
<td>&#x89C2;&#x5BDF;&#x8005;&#x8BA2;&#x9605;&#x65F6;&#x8C03;&#x7528;</td>
</tr>
<tr>
<td>onErrorReturn()</td>
<td>&#x9047;&#x5230;&#x9519;&#x8BEF;&#x65F6;&#xFF0C;&#x53D1;&#x9001;1&#x4E2A;&#x7279;&#x6B8A;&#x4E8B;&#x4EF6; &amp; &#x6B63;&#x5E38;&#x7EC8;&#x6B62;</td>
</tr>
<tr>
<td>onErrorResumeNext()</td>
<td>&#x62E6;&#x622A;&#x7684;&#x9519;&#x8BEF; &#x662F;Throwable &#x7C7B;&#x578B;</td>
</tr>
<tr>
<td>onExceptionResumeNext()</td>
<td>&#x62E6;&#x622A;&#x7684;&#x9519;&#x8BEF; &#x662F; Exception&#x7C7B;&#x578B;</td>
</tr>
<tr>
<td>retry()</td>
<td>&#x5F53;&#x6355;&#x6349;&#x5230;&#x9519;&#x8BEF;&#x65F6;&#xFF0C;&#x88AB;&#x89C2;&#x5BDF;&#x8005;&#x4F1A;&#x91CD;&#x65B0;&#x53D1;&#x5C04;&#x6570;&#x636E;</td>
</tr>
<tr>
<td>retryUntil()</td>
<td>&#x9047;&#x5230;&#x9519;&#x8BEF;&#xFF0C;&#x91CD;&#x65B0;&#x53D1;&#x5C04;&#xFF0C;&#x76F4;&#x5230;...</td>
</tr>
<tr>
<td>retryWhen()</td>
<td></td>
</tr>
<tr>
<td>repeat()</td>
<td>&#x65E0;&#x6761;&#x4EF6;&#x5730;&#x3001;&#x91CD;&#x590D;&#x53D1;&#x9001;&#x4E8B;&#x4EF6;</td>
</tr>
<tr>
<td>repeatWhen()</td>
<td></td>
</tr>
<tr>
<td>repeatUntil()</td>
<td></td>
</tr>
<tr>
<td>publish()</td>
<td></td>
</tr>
<tr>
<td>share()</td>
<td></td>
</tr>
<tr>
<td>connect()</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="&#x8865;&#x5145;&#x77E5;&#x8BC6;&#x70B9;"><a name="&#x8865;&#x5145;&#x77E5;&#x8BC6;&#x70B9;" class="anchor-navigation-ex-anchor" href="#&#x8865;&#x5145;&#x77E5;&#x8BC6;&#x70B9;"><i class="fa fa-link" aria-hidden="true"></i></a>11.5. &#x8865;&#x5145;&#x77E5;&#x8BC6;&#x70B9;</h2>
<h3 id="&#x94FE;&#x5F0F;&#x8C03;&#x7528;"><a name="&#x94FE;&#x5F0F;&#x8C03;&#x7528;" class="anchor-navigation-ex-anchor" href="#&#x94FE;&#x5F0F;&#x8C03;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a>11.5.1. &#x94FE;&#x5F0F;&#x8C03;&#x7528;</h3>
<pre><code class="lang-text">MsgInfo msgInfo = new MsgInfo();
// &#x94FE;&#x5F0F;&#x8C03;&#x7528;
msgInfo.setOwnerId(&quot;100011002&quot;)
        .setStatus(MsgInfo.Status.SENDING)
        .setTime(System.currentTimeMillis());

// &#x666E;&#x901A;&#x8C03;&#x7528;
msgInfo.setOwnerId(&quot;100011002&quot;);
msgInfo .setStatus(MsgInfo.Status.SENDING) ;
msgInfo .setTime(System.currentTimeMillis());

// &#x94FE;&#x5F0F;&#x8C03;&#x7528;&#x7684;&#x5173;&#x952E;&#x5728;&#x4E8E;&#x65B9;&#x6CD5;&#x7684;&#x8FD4;&#x56DE;&#x503C;&#xFF01;
public MsgInfo setStatus(int status) {
    this.status = status;
    // &#x6CE8;&#x610F;&#x8FD4;&#x56DE;&#x7684;&#x662F; this
    return this;
}
</code></pre>
<h1 id="retrofit-2x"><a name="retrofit-2x" class="anchor-navigation-ex-anchor" href="#retrofit-2x"><i class="fa fa-link" aria-hidden="true"></i></a>12. Retrofit 2.x</h1>
<pre><code class="lang-text">&#x4E00;&#x4E2A;&#x652F;&#x6301; RxJava&#x65B9;&#x5F0F;&#x8C03;&#x7528;&#x7684;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x6846;&#x67B6;
A type-safe HTTP client for Android and Java  by Square, Inc.
requires at minimum Java 7 or Android 2.3.

Retrofit &#x63D0;&#x4F9B;2&#x79CD;&#x98CE;&#x683C;&#x7684;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x65B9;&#x5F0F;&#xFF1A;
1&#x3001;&#x4F20;&#x7EDF;&#x98CE;&#x683C; (&#x7565;&#x8FC7;&#x4E0D;&#x770B;)
&#x91C7;&#x7528;Callback &#x63A5;&#x53E3;  
2&#x3001;RxJava &#x98CE;&#x683C; (&#x6D41;&#x884C;)
&#x91C7;&#x7528;Observable&#x63A5;&#x53E3;
</code></pre>
<h2 id="retrofit2--rxjava2--&#x4F9D;&#x8D56;"><a name="retrofit2--rxjava2--&#x4F9D;&#x8D56;" class="anchor-navigation-ex-anchor" href="#retrofit2--rxjava2--&#x4F9D;&#x8D56;"><i class="fa fa-link" aria-hidden="true"></i></a>12.1. Retrofit2 + Rxjava2  &#x4F9D;&#x8D56;</h2>
<pre><code class="lang-text">// rxjava&#x6838;&#x5FC3;&#x5E93;
compile &apos;io.reactivex.rxjava2:rxjava:2.0.1&apos;
// Android &#x652F;&#x6301; Rxjava
compile &apos;io.reactivex.rxjava2:rxandroid:2.0.1&apos;
// Android &#x652F;&#x6301; Retrofit
compile &apos;com.squareup.retrofit2:retrofit:2.1.0&apos;
// &#x8854;&#x63A5; Retrofit &amp; RxJava
compile &apos;com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0&apos;
// &#x652F;&#x6301;Gson&#x89E3;&#x6790;
compile &apos;com.squareup.retrofit2:converter-gson:2.1.0&apos;
</code></pre>
<table>
<thead>
<tr>
<th>&#x6CE8;&#x89E3;</th>
<th>&#x4F5C;&#x7528;</th>
</tr>
</thead>
<tbody>
<tr>
<td>@GET</td>
<td>get&#x8BF7;&#x6C42;</td>
</tr>
<tr>
<td>@POST</td>
<td>post&#x8BF7;&#x6C42;</td>
</tr>
<tr>
<td>@DELETE</td>
<td>delete&#x8BF7;&#x6C42;</td>
</tr>
<tr>
<td>@HEAD</td>
<td>head&#x8BF7;&#x6C42;</td>
</tr>
<tr>
<td>@OPTIONS</td>
<td>options&#x8BF7;&#x6C42;</td>
</tr>
<tr>
<td>@PATCH</td>
<td>patch&#x8BF7;&#x6C42;</td>
</tr>
<tr>
<td>@Headers</td>
<td>&#x6DFB;&#x52A0;&#x8BF7;&#x6C42;&#x5934;</td>
</tr>
<tr>
<td>@Path</td>
<td>get&#x8BF7;&#x6C42; &#xFF0C;user/{password}  &#x683C;&#x5F0F;</td>
</tr>
<tr>
<td>@Query</td>
<td>get&#x8BF7;&#x6C42; &#xFF0C; user/password?password=xxx &#x683C;&#x5F0F;</td>
</tr>
<tr>
<td>@FormUrlEncoded</td>
<td>&#x7528;&#x8868;&#x5355;&#x6570;&#x636E;&#x63D0;&#x4EA4;</td>
</tr>
<tr>
<td>@Field</td>
<td>post&#x9700;&#x8981;  post&#x8BF7;&#x6C42;&#x9700;&#x8981; &#xFF0C; &#x66FF;&#x6362;&#x53C2;&#x6570;</td>
</tr>
</tbody>
</table>
<pre><code class="lang-text">//&#x5B9A;&#x4E49;&#x8BF7;&#x6C42;&#x63A5;&#x53E3;
public interface BlogService {
    // get &#x65B9;&#x5F0F;
    @GET(&quot;getAllMusicInfoGson&quot;)
    Call&lt;ResponseBody&gt; getBlogByGet(@Query(&quot;pageNum&quot;) int pageNum);
    // post &#x65B9;&#x5F0F;
    @FormUrlEncoded
    @POST(&quot;getAllMusicInfoGson&quot;)
    Call&lt;ResponseBody&gt; getBlogByPost(@Field(&quot;pageNum&quot;) int pageNum);
}


//&#x7B80;&#x5355;&#x4F7F;&#x7528;
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(&quot;https://www.aivin666.cn/AivinInfo/&quot;)// url&#x6839;&#x76EE;&#x5F55;
        .build();

BlogService service = retrofit.create(BlogService.class);
//Call&lt;ResponseBody&gt; call = service.getBlogByGet(2);//get&#x65B9;&#x5F0F;
Call&lt;ResponseBody&gt; call = service.getBlogByPost(2);//post&#x65B9;&#x5F0F;
call.enqueue(new Callback&lt;ResponseBody&gt;() {
    @Override
    public void onResponse(Call&lt;ResponseBody&gt; call,
     Response&lt;ResponseBody&gt; response) {
        try {
            String reslut = response.body().string();
            tvHttpResult.setText(reslut);
            Log.i(TAG , reslut) ;
        } catch (Exception e) { }
    }

    @Override
    public void onFailure(Call&lt;ResponseBody&gt; call, Throwable t) {  }
});
</code></pre>
<h1 id="retrofitrxjavaokhttp"><a name="retrofitrxjavaokhttp" class="anchor-navigation-ex-anchor" href="#retrofitrxjavaokhttp"><i class="fa fa-link" aria-hidden="true"></i></a>13. Retrofit_RxJava_OkHttp</h1>
<pre><code class="lang-text">Retrofit + RxJava + OkHttp
Retrofit &#x8D1F;&#x8D23;&#x8BF7;&#x6C42;&#x7684;&#x6570;&#x636E;&#x548C;&#x8BF7;&#x6C42;&#x7684;&#x7ED3;&#x679C;
RxJava &#x8D1F;&#x8D23;&#x5F02;&#x6B65;&#xFF0C;&#x5404;&#x79CD;&#x7EBF;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x5207;&#x6362;
OkHttp &#x8D1F;&#x8D23;&#x8BF7;&#x6C42;&#x7684;&#x8FC7;&#x7A0B;

// rxjava &#x6838;&#x5FC3;&#x5E93;
compile &apos;io.reactivex.rxjava2:rxjava:2.1.14&apos;
// Android &#x652F;&#x6301; Rxjava
compile &apos;io.reactivex.rxjava2:rxandroid:2.0.1&apos;
// retrofit &#x6838;&#x5FC3;&#x5E93;
compile &apos;com.squareup.retrofit2:retrofit:2.4.0&apos;
// retrofit json &#x8F6C;&#x6362;&#x5668;
compile &apos;com.squareup.retrofit2:converter-gson:2.3.0&apos;
//  &#x8854;&#x63A5; Retrofit &amp; RxJava
compile &apos;com.squareup.retrofit2:adapter-rxjava2:2.3.0&apos;
// okhttp &#x6838;&#x5FC3;&#x5E93;
compile &apos;com.squareup.okhttp3:okhttp:3.10.0&apos;
// okhttp log &#x62E6;&#x622A;&#x5668;
compile &apos;com.squareup.okhttp3:logging-interceptor:3.8.1&apos;
</code></pre>
<h2 id="rxjava-&#x8BA2;&#x9605;&#x8005;"><a name="rxjava-&#x8BA2;&#x9605;&#x8005;" class="anchor-navigation-ex-anchor" href="#rxjava-&#x8BA2;&#x9605;&#x8005;"><i class="fa fa-link" aria-hidden="true"></i></a>13.1. RxJava &#x8BA2;&#x9605;&#x8005;</h2>
<pre><code class="lang-text">public class HttpSubscriber&lt;T&gt; implements Observer&lt;T&gt; {
    private PicInfoSubscriberListener subscriberOnListener;
    private Context context;
    private Disposable disposable;
    public HttpSubscriber( PicInfoSubscriberListener subscriberOnListener, Context context) {
        this.subscriberOnListener = subscriberOnListener;
        this.context = context;
    }

    @Override
    public void onSubscribe(@NonNull Disposable d) {
        disposable = d;
    }

    @Override
    public void onComplete() {
        if( (subscriberOnListener == null) ||  (context == null))  {
            if(disposable != null &amp;&amp; !disposable.isDisposed()){
                //&#x5207;&#x65AD;&#x8BA2;&#x9605;&#x5173;&#x7CFB;
                disposable.dispose();
            }
        }
    }

    @Override
    public void onError(Throwable e) {
        if(subscriberOnListener != null &amp;&amp; context != null)  {
            if (e instanceof SocketTimeoutException) {
                subscriberOnListener.onError(-1001, &quot;&#x7F51;&#x7EDC;&#x8D85;&#x65F6;&#xFF0C;&#x8BF7;&#x68C0;&#x67E5;&#x60A8;&#x7684;&#x7F51;&#x7EDC;&#x72B6;&#x6001;&quot;);
            } else if (e instanceof ConnectException) {
                subscriberOnListener.onError(-1002, &quot;&#x7F51;&#x7EDC;&#x94FE;&#x63A5;&#x4E2D;&#x65AD;&#xFF0C;&#x8BF7;&#x68C0;&#x67E5;&#x60A8;&#x7684;&#x7F51;&#x7EDC;&#x72B6;&#x6001;&quot;);
            } else if(e instanceof MyException){
                subscriberOnListener.onError(((MyException)e).getCode(), ((MyException)e).getMsg());
            } else  {
                subscriberOnListener.onError(-1003, &quot;&#x672A;&#x77E5;&#x9519;&#x8BEF;:&quot; + e.getMessage());
            }
        }  else  {
            if(disposable != null &amp;&amp; !disposable.isDisposed()){
                disposable.dispose();
            }

        }
    }

    @SuppressWarnings(&quot;unchecked&quot;)
    @Override
    public void onNext(T t) {
        if(subscriberOnListener != null &amp;&amp; context != null)  {
            // &#x6536;&#x5230;&#x60F3;&#x8981;&#x7684;&#x8BA2;&#x9605;&#x4FE1;&#x606F; &#xFF0C;&#x7136;&#x540E;&#x901A;&#x8FC7;&#x56DE;&#x5230;&#x63A5;&#x53E3; &#x53D1;&#x9001;&#x5230;&#x9700;&#x8981;&#x6570;&#x636E;&#x7684;&#x5730;&#x65B9;
            subscriberOnListener.onSucceed((List&lt;PicBean&gt;) t);
        }  else  {
            if(disposable != null &amp;&amp; !disposable.isDisposed()){
                disposable.dispose();
            }
        }
    }
}
</code></pre>
<h2 id="&#x5B9A;&#x4E49;-&#x53D1;&#x5E03;&#x8005;-&#x7684;&#x80FD;&#x529B;&#x63A5;&#x53E3;"><a name="&#x5B9A;&#x4E49;-&#x53D1;&#x5E03;&#x8005;-&#x7684;&#x80FD;&#x529B;&#x63A5;&#x53E3;" class="anchor-navigation-ex-anchor" href="#&#x5B9A;&#x4E49;-&#x53D1;&#x5E03;&#x8005;-&#x7684;&#x80FD;&#x529B;&#x63A5;&#x53E3;"><i class="fa fa-link" aria-hidden="true"></i></a>13.2. &#x5B9A;&#x4E49; &#x53D1;&#x5E03;&#x8005; &#x7684;&#x80FD;&#x529B;&#x63A5;&#x53E3;</h2>
<pre><code class="lang-text">/**
 *  &#x6700;&#x7EC8;&#x7684;&#x8BBF;&#x95EE;&#x5730;&#x5740;&#x662F; &#x4E3B;&#x5730;&#x5740; + &#x5C3E;&#x5730;&#x5740; http://xxx/getAllPicInfoGson?pageNum=6
 *  &#x6B64;&#x5904;&#x586B;&#x5199; &#x5C3E;&#x5730;&#x5740;
 */ 
@GET(&quot;getAllPicInfoGson&quot;)
Observable&lt;List&lt;PicBean&gt;&gt; getPicListByGet(@Query(&quot;pageNum&quot;) int pageNum );

@FormUrlEncoded
@POST(&quot;getAllPicInfoGson&quot;)
Observable&lt;List&lt;PicBean&gt;&gt; getPicListByPost(  @Field(&quot;pageNum&quot;) int pageNum );
</code></pre>
<h2 id="&#x5C01;&#x88C5;&#x53D1;&#x5E03;&#x8005;"><a name="&#x5C01;&#x88C5;&#x53D1;&#x5E03;&#x8005;" class="anchor-navigation-ex-anchor" href="#&#x5C01;&#x88C5;&#x53D1;&#x5E03;&#x8005;"><i class="fa fa-link" aria-hidden="true"></i></a>13.3. &#x5C01;&#x88C5;&#x53D1;&#x5E03;&#x8005;</h2>
<pre><code class="lang-text">/**
 *  &#x5C01;&#x88C5; &#x56FE;&#x7247;&#x6A21;&#x5757;&#x7684;http&#x63A5;&#x53E3;
 */
public class PicInfoApi {
    private final String TAG=&quot;PicInfoApi&quot; ;
    private static PicInfoApi picInfoApi;
    private PicInfoService picInfoService;
    private PicInfoApi()  {
        final String BASE_URL_PANDA = &quot;https://www.aivin666.cn/AivinInfo/&quot;;
        picInfoService = HttpClient.getInstance(BASE_URL_PANDA).createApi(PicInfoService.class);
    }

    public static PicInfoApi getInstance() {
        if(picInfoApi == null) {
            picInfoApi = new PicInfoApi();
        }
        return picInfoApi;
    }

    public void getPicListByGet (Observer &lt;List&lt;PicBean&gt; &gt;subscriber , int pageNum) {
        // &#x901A;&#x8FC7;&#x64CD;&#x4F5C;&#x7B26; map(...) &#x5C06;&#x63A5;&#x6536;&#x7684;&#x6570;&#x636E;&#x7ECF;&#x8FC7;&#x5904;&#x7406;&#x540E;&#x518D;&#x8FD4;&#x56DE;
        Observable observable = picInfoService.getPicListByGet(pageNum)  .flatMap( function );
        toSubscribe(observable, subscriber);
    }

    public void getPicListByPost (Observer&lt;List&lt;PicBean&gt;&gt; subscriber , int pageNum) {
        // &#x901A;&#x8FC7;&#x64CD;&#x4F5C;&#x7B26; map(...) &#x5C06;&#x63A5;&#x6536;&#x7684;&#x6570;&#x636E;&#x7ECF;&#x8FC7;&#x5904;&#x7406;&#x540E;&#x518D;&#x8FD4;&#x56DE;
        Observable   observable = picInfoService.getPicListByPost(pageNum) .flatMap( function );
        toSubscribe(observable, subscriber); // &#x5C06;&#x89C2;&#x5BDF;&#x8005; &#x548C;&#x8BA2;&#x9605;&#x8005; &#x5173;&#x8054;&#x8D77;&#x6765;
    }

    private  void toSubscribe( Observable&lt;List&lt;PicBean&gt;&gt; o, Observer&lt;List&lt;PicBean&gt;&gt; s){
       o.subscribeOn(Schedulers.io()) // &#x8FD0;&#x884C;&#x5728; io &#x7EBF;&#x7A0B;&#x4E2D;
                .unsubscribeOn(Schedulers.io())//  &#x53D6;&#x6D88;&#x8BA2;&#x9605;
                .observeOn(AndroidSchedulers.mainThread())// &#x6307;&#x5B9A;&#x63A5;&#x6536;&#x4E8B;&#x4EF6;&#x7684;&#x7EBF;&#x7A0B;
                .subscribe(s);// &#x8BA2;&#x9605;
    }


    /***
     *  &#x914D;&#x5408; &#x64CD;&#x4F5C;&#x7B26; map &#x4F7F;&#x7528;
     *  Function&lt;List&lt;PicBean&gt;, List&lt;PicBean&gt;&gt;  &#x7B2C;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x8F93;&#x5165;&#x6570;&#x636E;&#x7C7B;&#x578B; &#xFF0C; &#x7B2C;&#x4E8C;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x8F93;&#x51FA;&#x7C7B;&#x578B; &lt;br&gt;
     *   List&lt;PicBean&gt; apply(List&lt; PicBean&gt; list)
     *   &#x7B2C;&#x4E00;&#x4E2A;   List&lt;PicBean&gt;  &#x662F;&#x8FD4;&#x56DE;&#x6570;&#x636E;&#x7C7B;&#x578B; &#xFF0C; &#x7B2C;&#x4E8C;&#x4E2A; List&lt;PicBean&gt;  &#x662F;&#x8F93;&#x5165;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;
     *
     */
    private Function function = new Function&lt;List&lt;PicBean&gt;,  Observable&lt;List&lt;PicBean&gt; &gt;     &gt;() {
        @Override
        public Observable&lt;List&lt;PicBean&gt; &gt;   apply(List&lt;PicBean&gt; list) throws Exception {

            // &#x53EF;&#x4EE5;&#x5728;&#x8FD9;&#x4E2A;&#x51FD;&#x6570;&#x91CC;&#x9762;&#x8FDB;&#x884C;&#x6570;&#x636E;&#x8FC7;&#x6EE4;&#x7B49;&#x5904;&#x7406;
            if(list != null &amp;&amp; list.size() &gt; 0)  {
                Log.i(TAG , &quot; &#x6570;&#x636E;&#x5904;&#x7406;=&quot;+ list.size()) ;
            }else{
                Log.i(TAG , &quot; &#x6570;&#x636E;&#x5904;&#x7406;  &#x6CA1;&#x6709;&#x83B7;&#x53D6;&#x5230;&#x6570;&#x636E;&quot;) ;
            }
            return Observable.fromArray(list) ;
        }
    };
</code></pre>
<h2 id="&#x8FDB;&#x884C;http&#x8BBF;&#x95EE;&#x7684;&#x76F8;&#x5173;&#x914D;&#x7F6E;"><a name="&#x8FDB;&#x884C;http&#x8BBF;&#x95EE;&#x7684;&#x76F8;&#x5173;&#x914D;&#x7F6E;" class="anchor-navigation-ex-anchor" href="#&#x8FDB;&#x884C;http&#x8BBF;&#x95EE;&#x7684;&#x76F8;&#x5173;&#x914D;&#x7F6E;"><i class="fa fa-link" aria-hidden="true"></i></a>13.4. &#x8FDB;&#x884C;http&#x8BBF;&#x95EE;&#x7684;&#x76F8;&#x5173;&#x914D;&#x7F6E;</h2>
<pre><code class="lang-text">public class HttpClient {
    private static String token = &quot;&quot;;
    private static Retrofit retrofit;
    private static HashMap&lt;String, HttpClient&gt; clients = new HashMap&lt;&gt;();

    private HttpClient(String url) {
        retrofit = new Retrofit.Builder()
                .baseUrl(url) // &#x8BBE;&#x7F6E;&#x63A5;&#x53E3;&#x4E3B;&#x5730;&#x5740;
                .client(getHttpRequestClient())// &#x914D;&#x7F6E; HTTP &#x8BF7;&#x6C42;&#x5BA2;&#x6237;&#x7AEF;
                .addConverterFactory(GsonConverterFactory.create())// &#x914D;&#x7F6E;json &#x8F6C;&#x6362;&#x5668;
                // &#x6DFB;&#x52A0;&#x652F;&#x6301; - &#x8FD4;&#x56DE;&#x503C;&#x5B9A;&#x4E49;&#x4E3A;Observable&#x5BF9;&#x8C61;
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
    }

    public &lt;T&gt; T createApi(Class&lt;T&gt; clazz) {
        return retrofit.create(clazz);// &#x83B7;&#x53D6;&#x63A5;&#x53E3;&#x5B9E;&#x4F8B;
    }

    public static HttpClient getInstance(String url){
        if(!clients.containsKey(url))  {
            HttpClient httpClient = new HttpClient(url);
            clients.put(url, httpClient);
        }
        return clients.get(url); // &#x4E00;&#x4E2A;&#x4E3B;&#x5730;&#x5740; &#x5BF9;&#x5E94;&#x4E00;&#x4E2A;client
    }


    /**
     *  &#x5B9A;&#x5236; http &#x8BBF;&#x95EE;&#x8BBF;&#x95EE;&#x5668;
     */
    private OkHttpClient getHttpRequestClient() {
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor( new OkHttpLogTool());
        // &#x6253;&#x5370;&#x83B7;&#x53D6;&#x5230;&#x7684;&#x4FE1;&#x606F;&#x3002; &#xFF08;&#x4E0D;&#x8BBE;&#x7F6E;&#x4E0D;&#x6253;&#x5370;&#xFF09;
        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        //&#x8BBE;&#x7F6E;&#x7F13;&#x5B58;&#x8DEF;&#x5F84;
        String cacheDir = MyApplication.getInstance().getExternalCacheDir().getAbsolutePath() ;
        File httpCacheDirectory = new File(cacheDir , &quot;OKHttpResponses&quot;);
        //&#x8BBE;&#x7F6E;&#x7F13;&#x5B58; &#x5927;&#x5C0F;
        Cache cache = new Cache(httpCacheDirectory, 50 * 1024 * 1024);
        // &#x81EA;&#x5B9A;&#x4E49;&#x62E6;&#x622A;&#x5668;
        Interceptor interceptor = new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request request = chain.request()
                        .newBuilder()
                        .addHeader(&quot;token&quot;, token)
                        .build();

                // &#x65E0;&#x7F51;&#x7EDC;&#x65F6; &#xFF0C;&#x4F7F;&#x7528;&#x7F13;&#x5B58;
                if (!NetUtil.isNetworkConnected(MyApplication.getInstance())) {
                    request = request.newBuilder()
                            .cacheControl(CacheControl.FORCE_CACHE)
                            .build();
                }

                Response response = chain.proceed(request);
                if (NetUtil.isNetworkConnected(MyApplication.getInstance())) {
                    // &#x6709;&#x7F51;&#x7EDC;&#x65F6; &#x8BBE;&#x7F6E;&#x7F13;&#x5B58;&#x8D85;&#x65F6;&#x65F6;&#x95F4;0&#x4E2A;&#x5C0F;&#x65F6;
                    int maxAge = 0 * 60;
                    response.newBuilder()
                            .addHeader(&quot;Cache-Control&quot;, &quot;public, max-age=&quot; + maxAge)
                            // &#x6E05;&#x9664;&#x5934;&#x4FE1;&#x606F;&#xFF0C;&#x56E0;&#x4E3A;&#x670D;&#x52A1;&#x5668;&#x5982;&#x679C;&#x4E0D;&#x652F;&#x6301;&#xFF0C;&#x4F1A;&#x8FD4;&#x56DE;&#x4E00;&#x4E9B;&#x5E72;&#x6270;&#x4FE1;&#x606F;&#xFF0C;&#x4E0D;&#x6E05;&#x9664;&#x4E0B;&#x9762;&#x65E0;&#x6CD5;&#x751F;&#x6548;
                            .removeHeader(&quot;Pragma&quot;)
                            .build();
                } else {
                    // &#x65E0;&#x7F51;&#x7EDC;&#x65F6;&#xFF0C;&#x8BBE;&#x7F6E;&#x8D85;&#x65F6;&#x4E3A;1&#x5468;
                    int maxStale = 60 * 60 * 24 * 7;
                    response.newBuilder()
                            .addHeader(&quot;Cache-Control&quot;, &quot;public, only-if-cached, max-stale=&quot; + maxStale)
                            .removeHeader(&quot;Pragma&quot;)
                            .build();
                }
                return response;
            }

        };

        OkHttpClient httpClient = new OkHttpClient.Builder()
                .addInterceptor(logging)
                .cache(cache)
                .addInterceptor(interceptor)
                .build();

        return httpClient;
    }
}
</code></pre>
<h2 id="&#x5982;&#x4F55;&#x4F7F;&#x7528;"><a name="&#x5982;&#x4F55;&#x4F7F;&#x7528;" class="anchor-navigation-ex-anchor" href="#&#x5982;&#x4F55;&#x4F7F;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a>13.5. &#x5982;&#x4F55;&#x4F7F;&#x7528;</h2>
<pre><code class="lang-text">private int pageNum = 6 ;
private void testUrlGet() {
    PicInfoApi.getInstance().getPicListByGet(  new HttpSubscriber&lt;List&lt;PicBean&gt;&gt;(new PicInfoSubscriberListener () {
        @Override
        public void onSucceed(List&lt;PicBean&gt; data) {
          // &#x83B7;&#x53D6;&#x5230;&#x6570;&#x636E;
        }

        @Override
        public void onError(int code, String msg) {   }
    },  this) , pageNum);
}


private void testUrlPost( ){
    PicInfoApi.getInstance().getPicListByPost(  new HttpSubscriber&lt;List&lt;PicBean&gt;&gt;(new PicInfoSubscriberListener () {
        @Override
        public void onSucceed(List&lt;PicBean&gt; data) {   }

        @Override
        public void onError(int code, String msg) {   }
    },  this) , pageNum);
}
</code></pre>
<h1 id="react-native"><a name="react-native" class="anchor-navigation-ex-anchor" href="#react-native"><i class="fa fa-link" aria-hidden="true"></i></a>14. react-native</h1>
<p>&#x5C06; reate-native &#x7684;&#x76F8;&#x5173;&#x7B14;&#x8BB0;&#x5220;&#x9664;&#x3002;&#x4F53;&#x9A8C;&#x4E0D;&#x5982; Flutter &#xFF0C;&#x8DE8;&#x5E73;&#x53F0;&#x8BF7;&#x4F7F;&#x7528; flutter&#x3002;</p>
<h1 id="hierarchyviewer"><a name="hierarchyviewer" class="anchor-navigation-ex-anchor" href="#hierarchyviewer"><i class="fa fa-link" aria-hidden="true"></i></a>15. Hierarchyviewer</h1>
<p>&#x501F;&#x52A9;<a href="https://github.com/romainguy/ViewServer" target="_blank">ViewServer</a> &#x8FD9;&#x4E2A;&#x5DE5;&#x5177;&#x53EF;&#x4EE5;&#x5728;&#x4EFB;&#x4F55;&#x624B;&#x673A;&#x4E0A;&#x4F7F;&#x7528; hierarchyviewer&#x3002;</p>
<pre><code class="lang-text">&#x6CE8;&#xFF1A;&#x5728; android device monitor &#x53EF;&#x4EE5;&#x627E;&#x5230; hierarchyviewer&#x3002; 
&#x68C0;&#x9A8C;&#x624B;&#x673A;&#x662F;&#x5426;&#x5F00;&#x542F;&#x4E86;View Server&#xFF1A;

adb shell service call window 3
//View Server&#x5904;&#x4E8E;&#x5173;&#x95ED;&#x72B6;&#x6001;
&#x8FD4;&#x56DE;&#xFF1A;Result: Parcel(00000000 00000000 &apos;........&apos;)&quot;
//View Server&#x5904;&#x4E8E;&#x5F00;&#x542F;&#x72B6;&#x6001;
&#x8FD4;&#x56DE;&#x503C;&#xFF1A;Result: Parcel(00000000 00000001 &apos;........&apos;)&quot;
</code></pre>
<h1 id="&#x6293;&#x5305;&#x5DE5;&#x5177;"><a name="&#x6293;&#x5305;&#x5DE5;&#x5177;" class="anchor-navigation-ex-anchor" href="#&#x6293;&#x5305;&#x5DE5;&#x5177;"><i class="fa fa-link" aria-hidden="true"></i></a>16. &#x6293;&#x5305;&#x5DE5;&#x5177;</h1>
<pre><code class="lang-text">&#x5BF9;&#x4E8E;&#x4E00;&#x822C;&#x7684;&#x516C;&#x53F8;&#x548C;&#x4E2A;&#x4EBA;&#x6765;&#x8BF4;&#xFF0C;&#x6293;&#x5305;&#x96BE;&#x5EA6;&#x8D8A;&#x6765;&#x8D8A;&#x5927;&#x3002;
&#x6682;&#x65F6;&#x6CA1;&#x6709;&#x6DF1;&#x5165;&#x7814;&#x7A76;&#x3002;
1&#x3001;&#x9AD8;&#x7248;&#x672C;&#x7684;Android&#x7CFB;&#x7EDF;&#xFF0C;&#x4F8B;&#x5982;7.0&#x4EE5;&#x4E0A;&#x4F1A;&#x6293;&#x5305;&#x66F4;&#x96BE;&#x3002;
2&#x3001;APP&#x505A;&#x4E86;&#x8BC1;&#x4E66;&#x5408;&#x6CD5;&#x6027;&#x68C0;&#x9A8C;&#x3002;&#x4F8B;&#x5982;&#x68C0;&#x6D4B;&#x5230;&#x975E;&#x6CD5;&#x8BC1;&#x4E66;&#x65E0;&#x6CD5;&#x542F;&#x52A8;APP&#x3002;
3&#x3001;https &#x4F20;&#x8F93; &#x5E76;&#x5BF9;&#x4F20;&#x8F93;&#x5185;&#x5BB9;&#x8FDB;&#x884C;&#x4E86;&#x52A0;&#x5BC6;&#x3002;&#x6293;&#x5230;&#x540E;&#x5E76;&#x4E0D;&#x662F;&#x660E;&#x6587;&#x3002;

&#x5E38;&#x7528;&#x5DE5;&#x5177;&#x6709; 
&#x5C0F;&#x8336;&#x58F6; charles https://www.charlesproxy.com/download/
HttpCanary  https://github.com/MegatronKing/HttpCanary    
Fiddler
</code></pre>
<h1 id="&#x53CD;&#x7F16;&#x8BD1;"><a name="&#x53CD;&#x7F16;&#x8BD1;" class="anchor-navigation-ex-anchor" href="#&#x53CD;&#x7F16;&#x8BD1;"><i class="fa fa-link" aria-hidden="true"></i></a>17. &#x53CD;&#x7F16;&#x8BD1;</h1>
<p>keystore &#x3001;</p>
<pre><code class="lang-text">// apktool
http://ibotpeaches.github.io/Apktool/install/
&#x89E3;&#x538B;apk&#x6587;&#x4EF6;&#xFF0C;&#x83B7;&#x53D6;&#x5176;&#x4E2D;&#x7684;&#x56FE;&#x7247;&#x3001;&#x5E03;&#x5C40;&#x6587;&#x4EF6; &#xFF0C;&#x5FC5;&#x987B;&#x7528;apktool&#x6253;&#x5F00;&#x3002;
apktool.bat d -f test.apk  test
&#x76F4;&#x63A5;&#x7528;&#x89E3;&#x538B;&#x8F6F;&#x4EF6;&#x6253;&#x5F00;&#x7684;&#x4F1A;&#x663E;&#x793A;&#x4E71;&#x7801;&#x3002;

// dex2jar 
https://sourceforge.net/projects/dex2jar/files/
&#x76F4;&#x63A5;&#x7528;&#x89E3;&#x538B;&#x8F6F;&#x4EF6;&#x89E3;&#x5F00;,&#x83B7;&#x5F97;dex&#x3002;
&#x7528; dex2jar &#x5C06;classes.dex&#x8F6C;&#x53D8;&#x6210;jar&#x5305;&#x3002;
dex2jar.bat  classes.dex  //&#x5728;&#x5F53;&#x524D;&#x6587;&#x4EF6;&#x5939;&#x91CC;&#x751F;&#x6210;classes_dex2jar.jar 

// jd-gui
http://java-decompiler.github.io/
&#x7528; jd-gui&#x6253;&#x5F00;jar&#x5305;&#xFF0C;&#x67E5;&#x770B;class &#x6587;&#x4EF6;&#x3002;
</code></pre>
<h1 id="mac-&#x7CFB;&#x7EDF;"><a name="mac-&#x7CFB;&#x7EDF;" class="anchor-navigation-ex-anchor" href="#mac-&#x7CFB;&#x7EDF;"><i class="fa fa-link" aria-hidden="true"></i></a>18. Mac &#x7CFB;&#x7EDF;</h1>
<pre><code class="lang-text">&#x590D;&#x5236;&#x7C98;&#x8D34;  command +c v
xcode &#x5168;&#x5C40;&#x67E5;&#x627E;   command + shift + f
commit+shift+J   &#x5FEB;&#x901F;&#x5B9A;&#x4F4D;&#x6587;&#x4EF6;   // xcode
shift+ option + &#x5168;&#x5C4F;&#x6309;&#x94AE;  --&#x300B; &#x6700;&#x5927;&#x5316;
command +  &#x1F53C;&#x7BAD;&#x5934;  // &#x8FD4;&#x56DE;&#x4E0A;&#x4E00;&#x4E2A;&#x76EE;&#x5F55;
command + F3            //&#x56DE;&#x5230;&#x684C;&#x9762;
command + tab          //&#x7A0B;&#x5E8F;&#x5207;&#x6362;  

&#x8D34;&#x56FE;&#x5DE5;&#x5177; //  &#x5B89;&#x88C5; snap &#x8F6F;&#x4EF6;
&#x56FE;&#x7247;&#x6D4F;&#x89C8;&#x8F6F;&#x4EF6;&#xFF0C;&#x7528; kantu  &#x770B;&#x56FE; &#x3002;

//   Xcode&#x6253;&#x5305; &#x5E94;&#x7528;
https://www.yisu.com/zixun/80031.html
&#x9996;&#x5148;&#x6211;&#x4EEC;&#x6253;&#x5F00;&#x8981;&#x6253;&#x5305;&#x7684;&#x5DE5;&#x7A0B;&#x6587;&#x4EF6;&#xFF0C;comm&#xFF0B;shift&#xFF0B;K&#x6E05;&#x7A7A;&#xFF0C;&#x518D;comm&#xFF0B;B&#x7F16;&#x8BD1;&#x4E00;&#x4E0B;&#xFF0C;
1&#x3001;product --&gt;  scheme  --&gt;  editor scheme &#x628A;debaug&#x6539;&#x6210;release&#xFF0C;&#x70B9;&#x51FB;close&#x3002;
2&#x3001;product --&gt;     archive
</code></pre>
<footer class="page-footer"><span class="copyright">( no Copyright&#xFF0C;enjoy youself ! ) all right reserved&#xFF0C;powered by Gitbook</span><span class="footer-modification">The file was updated at :
2022-04-04 10:49:02
</span></footer>
                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="../doc/常用网站.html" class="navigation navigation-prev " aria-label="Previous page: 常用网站">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="../doc/开发规范.html" class="navigation navigation-next " aria-label="Next page: 开发规范">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"常用软件和框架","level":"1.3","depth":1,"next":{"title":"开发规范","level":"1.4","depth":1,"path":"chinese/doc/开发规范.md","ref":"chinese/doc/开发规范.md","articles":[]},"previous":{"title":"常用网站","level":"1.2","depth":1,"path":"chinese/doc/常用网站.md","ref":"chinese/doc/常用网站.md","articles":[]},"dir":"ltr"},"config":{"plugins":["-search","search-plus","todo","anchor-navigation-ex","copy-code-button","fontsettings","tbfed-pagefooter","local-video","splitter","expandable-chapters","favicon","theme-comscore","local-video"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"( no Copyright，enjoy youself ! )","modify_label":"The file was updated at :","modify_format":"YYYY-MM-DD HH:mm:ss"},"todo":{},"splitter":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"family":"sans","size":2,"theme":"white"},"highlight":{},"anchor-navigation-ex":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":true},"favicon":{"shortcut":"assets/images/favicon.ico","bookmark":"assets/images/favicon.ico"},"theme-comscore":{},"local-video":{},"copy-code-button":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{},"search-plus":{}},"theme":"default","author":"Aivin","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Aivin开发笔记","language":"zh-hans","gitbook":"*","description":"Aivin开发笔记"},"file":{"path":"chinese/常用软件/常用软件和框架.md","mtime":"2022-04-04T02:49:02.903Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-04-04T03:47:09.782Z"},"basePath":"../..","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="../../gitbook/gitbook.js"></script>
    <script src="../../gitbook/theme.js"></script>
    
        
        <script src="../../gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-search-plus/search.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-copy-code-button/toggle.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-local-video/video.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-splitter/splitter.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-theme-comscore/test.js"></script>
        
    

    </body>
</html>

